/* clear out work directory */
proc datasets lib = work nolist memtype = data kill force;
quit;
options validvarname = v7;
libname sdtm 'C:\Users\gonza\OneDrive - datarichconsulting.com\Desktop\GitHub\Beautiful_Minds\Data\SDTM';
libname adam 'C:\Users\gonza\OneDrive - datarichconsulting.com\Desktop\GitHub\Beautiful_Minds\Data\ADaM';
libname cadam 'C:\Users\gonza\OneDrive - datarichconsulting.com\Desktop\GitHub\Beautiful_Minds\Data\ADaM\CDISC' access = readonly;
Advanced Programming with R: Leveraging Tidyverse and Admiral for ADaM Dataset Creation with a Comparison to SAS
PharmaSUG 2025 - Paper OS-167
Setup
1 proc datasets lib = work nolist memtype = data kill force;
2 quit;
NOTE: PROCEDURE DATASETS used (Total process time):
real time 0.01 seconds
cpu time 0.01 seconds
3
4 options validvarname = v7;
5 libname sdtm 'C:\Users\gonza\OneDrive - datarichconsulting.com\Desktop\GitHub\Beautiful_Minds\Data\SDTM';
NOTE: Libref SDTM was successfully assigned as follows:
Engine: V9
Physical Name: C:\Users\gonza\OneDrive - datarichconsulting.com\Desktop\GitHub\Beautiful_Minds\Data\SDTM
6 libname adam 'C:\Users\gonza\OneDrive - datarichconsulting.com\Desktop\GitHub\Beautiful_Minds\Data\ADaM';
NOTE: Libref ADAM was successfully assigned as follows:
Engine: V9
Physical Name: C:\Users\gonza\OneDrive - datarichconsulting.com\Desktop\GitHub\Beautiful_Minds\Data\ADaM
7 libname cadam 'C:\Users\gonza\OneDrive - datarichconsulting.com\Desktop\GitHub\Beautiful_Minds\Data\ADaM\CDISC' access =
7 ! readonly;
NOTE: Libref CADAM was successfully assigned as follows:
Engine: V9
Physical Name: C:\Users\gonza\OneDrive - datarichconsulting.com\Desktop\GitHub\Beautiful_Minds\Data\ADaM\CDISC# Clear out the current workspace (similar to clearing the 'work' library)
rm(list = ls())
# Install required packages if not already installed
# Define the list of required packages
required_packages <- c("tidyverse", "safetyData", "admiral", "readxl", "gt", "haven", "waldo")
# Function to install missing packages
install_if_missing <- function(packages) {
installed_packages <- rownames(installed.packages())
missing_packages <- packages[!packages %in% installed_packages]
if (length(missing_packages) > 0) {
install.packages(missing_packages, dependencies = TRUE)
}
}
# Install any missing packages
install_if_missing(required_packages)
# Load required libraries
library(tidyverse) # Includes dplyr, purrr, stringr, and other necessary tidy tools── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.1.4 ✔ readr 2.1.5
✔ forcats 1.0.0 ✔ stringr 1.5.1
✔ ggplot2 3.5.1 ✔ tibble 3.2.1
✔ lubridate 1.9.3 ✔ tidyr 1.3.1
✔ purrr 1.0.2
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(safetyData) # Includes all the datasets from CDISC
library(admiral) # ADaM derivations
library(readxl) # Reading Excel files
library(gt) # Fancy tables
library(haven) # Reading xpt files
library(waldo) # Compares R objectsShell Creation
/**************************************************/
/*** BEGIN SECTION TO CREATE THE SHELL DATA SET ***/
/**************************************************/
libname specs 'C:\Users\gonza\OneDrive - datarichconsulting.com\Desktop\GitHub\Beautiful_Minds\adam_define.xlsx';
data adslspec;
length allvars $2000;
set specs.'ADSL$'n end = eof;
retain allvars;
length dc $200;
call missing(dc, dn);
allvars = catx(' ', allvars, variable);
if eof then call symputx('allvars', allvars);
run;
libname specs clear;
/* OPTION 1 - CREATING SHELL DATA SET */
/* create all numeric variables */
proc transpose data = adslspec out = tspec_n;
var dn;
id variable;
idlabel label;
where lowcase(type) in ('integer' 'float');
run;
/* create all character variables */
proc transpose data = adslspec out = tspec_c;
var dc;
id variable;
idlabel label;
where lowcase(type) not in ('integer' 'float');
run;
/* create master shell */
data adslskel;
retain &allvars;
set tspec_: (drop = _:);
run;
/* OPTION 2 - CREATING SHELL DATA SET */
data _null_;
set adslspec end = eof;
if _n_ = 1 then do;
call execute ('data adslskel;');
call execute (' attrib');
end;
if lowcase(type) not in ('integer' 'float') then __length = cats('$', length, '.');
else __length = cats(length, '.');
if not missing(DISPLAY_FORMAT) then __format = catx(' ', 'format =', DISPLAY_FORMAT);
attrbstmt = catx(' ', VARIABLE, 'label = ', quote(strip(LABEL)), 'length = ', __length, __format);
call execute (attrbstmt);
if eof then do;
call execute('; call missing(of _all_); stop; run;');
end;
run;
/************************************************/
/*** END SECTION TO CREATE THE SHELL DATA SET ***/
/************************************************/1 /**************************************************/
2 /*** BEGIN SECTION TO CREATE THE SHELL DATA SET ***/
3 /**************************************************/
4 libname specs 'C:\Users\gonza\OneDrive - datarichconsulting.com\Desktop\GitHub\Beautiful_Minds\adam_define.xlsx';
NOTE: Libref SPECS was successfully assigned as follows:
Engine: EXCEL
Physical Name: C:\Users\gonza\OneDrive - datarichconsulting.com\Desktop\GitHub\Beautiful_Minds\adam_define.xlsx
5
6 data adslspec;
7 length allvars $2000;
8 set specs.'ADSL$'n end = eof;
9 retain allvars;
10 length dc $200;
11 call missing(dc, dn);
12 allvars = catx(' ', allvars, variable);
13 if eof then call symputx('allvars', allvars);
14 run;
NOTE: There were 48 observations read from the data set SPECS.'ADSL$'n.
NOTE: The data set WORK.ADSLSPEC has 48 observations and 10 variables.
NOTE: DATA statement used (Total process time):
real time 0.07 seconds
cpu time 0.07 seconds
15
16 libname specs clear;
NOTE: Libref SPECS has been deassigned.
2 The SAS System 20:17 Monday, March 3, 2025
17
18 /* OPTION 1 - CREATING SHELL DATA SET */
19 /* create all numeric variables */
20 proc transpose data = adslspec out = tspec_n;
21 var dn;
22 id variable;
23 idlabel label;
24 where lowcase(type) in ('integer' 'float');
25 run;
NOTE: There were 20 observations read from the data set WORK.ADSLSPEC.
WHERE LOWCASE(type) in ('float', 'integer');
NOTE: The data set WORK.TSPEC_N has 1 observations and 21 variables.
NOTE: PROCEDURE TRANSPOSE used (Total process time):
real time 0.04 seconds
cpu time 0.03 seconds
26
27 /* create all character variables */
28 proc transpose data = adslspec out = tspec_c;
29 var dc;
30 id variable;
31 idlabel label;
32 where lowcase(type) not in ('integer' 'float');
33 run;
NOTE: There were 28 observations read from the data set WORK.ADSLSPEC.
WHERE LOWCASE(type) not in ('float', 'integer');
NOTE: The data set WORK.TSPEC_C has 1 observations and 29 variables.
NOTE: PROCEDURE TRANSPOSE used (Total process time):
real time 0.04 seconds
cpu time 0.03 seconds
34
35 /* create master shell */
36 data adslskel;
37 retain &allvars;
38 set tspec_: (drop = _:);
39 run;
NOTE: There were 1 observations read from the data set WORK.TSPEC_C.
NOTE: There were 1 observations read from the data set WORK.TSPEC_N.
NOTE: The data set WORK.ADSLSKEL has 2 observations and 48 variables.
NOTE: DATA statement used (Total process time):
real time 0.02 seconds
cpu time 0.01 seconds
40
41 /* OPTION 2 - CREATING SHELL DATA SET */
42 data _null_;
43 set adslspec end = eof;
44 if _n_ = 1 then do;
45 call execute ('data adslskel;');
46 call execute (' attrib');
47 end;
3 The SAS System 20:17 Monday, March 3, 2025
48 if lowcase(type) not in ('integer' 'float') then __length = cats('$', length, '.');
49 else __length = cats(length, '.');
50 if not missing(DISPLAY_FORMAT) then __format = catx(' ', 'format =', DISPLAY_FORMAT);
51 attrbstmt = catx(' ', VARIABLE, 'label = ', quote(strip(LABEL)), 'length = ', __length, __format);
52 call execute (attrbstmt);
53 if eof then do;
54 call execute('; call missing(of _all_); stop; run;');
55 end;
56 run;
NOTE: There were 48 observations read from the data set WORK.ADSLSPEC.
NOTE: DATA statement used (Total process time):
real time 0.01 seconds
cpu time 0.01 seconds
NOTE: CALL EXECUTE generated line.
1 + data adslskel;
2 + attrib
3 + STUDYID label = "Study Identifier" length = $12.
4 + USUBJID label = "Unique Subject Identifier" length = $11.
5 + SUBJID label = "Subject Identifier for the Study" length = $4.
6 + SITEID label = "Study Site Identifier" length = $3.
7 + SITEGR1 label = "Pooled Site Group 1" length = $3.
8 + ARM label = "Description of Planned Arm" length = $20.
9 + TRT01P label = "Planned Treatment for Period 01" length = $20.
10 + TRT01PN label = "Planned Treatment for Period 01 (N)" length = 8.
11 + TRT01A label = "Actual Treatment for Period 01" length = $20.
12 + TRT01AN label = "Actual Treatment for Period 01 (N)" length = 8.
13 + TRTSDT label = "Date of First Exposure to Treatment" length = 8. format = DATE9.
14 + TRTEDT label = "Date of Last Exposure to Treatment" length = 8. format = DATE9.
15 + TRTDUR label = "Duration of Treatment (days)" length = 8.
16 + AVGDD label = "Avg Daily Dose (as planned)" length = 8.
17 + CUMDOSE label = "Cumulative Dose (as planned)" length = 8.
18 + AGE label = "Age" length = 8.
19 + AGEGR1 label = "Pooled Age Group 1" length = $5.
20 + AGEGR1N label = "Pooled Age Group 1 (N)" length = 8.
21 + AGEU label = "Age Units" length = $5.
22 + RACE label = "Race" length = $32.
23 + RACEN label = "Race (N)" length = 8.
24 + SEX label = "Sex" length = $1.
25 + ETHNIC label = "Ethnicity" length = $22.
26 + SAFFL label = "Safety Population Flag" length = $1.
27 + ITTFL label = "Intent-To-Treat Population Flag" length = $1.
28 + EFFFL label = "Efficacy Population Flag" length = $1.
29 + COMP8FL label = "Completers of Week 8 Population Flag" length = $1.
30 + COMP16FL label = "Completers of Week 16 Population Flag" length = $1.
31 + COMP24FL label = "Completers of Week 24 Population Flag" length = $1.
32 + DISCONFL label = "Did the Subject Discontinue the Study?" length = $1.
33 + DSRAEFL label = "Discontinued due to AE?" length = $1.
34 + DTHFL label = "Subject Died?" length = $1.
35 + BMIBL label = "Baseline BMI (kg/m^2)" length = 8.
36 + BMIBLGR1 label = "Pooled Baseline BMI Group 1" length = $6.
37 + HEIGHTBL label = "Baseline Height (cm)" length = 8.
38 + WEIGHTBL label = "Baseline Weight (kg)" length = 8.
39 + EDUCLVL label = "Years of Education" length = 8.
40 + DISONSDT label = "Date of Onset of Disease" length = 8. format = DATE9.
41 + DURDIS label = "Duration of Disease (Months)" length = 8.
4 The SAS System 20:17 Monday, March 3, 2025
42 + DURDSGR1 label = "Pooled Disease Duration Group 1" length = $4.
43 + VISIT1DT label = "Date of Visit 1" length = 8. format = DATE9.
44 + RFSTDTC label = "Subject Reference Start Date/Time" length = $20.
45 + RFENDTC label = "Subject Reference End Date/Time" length = $20.
46 + VISNUMEN label = "End of Trt Visit (Vis 12 or Early Term.)" length = 8.
47 + RFENDT label = "Date of Discontinuation/Completion" length = 8. format = DATE9.
48 + DCDECOD label = "Standardized Disposition Term" length = $27.
49 + DCREASCD label = "Reason for Discontinuation" length = $18.
50 + MMSETOT label = "MMSE Total" length = 8.
51 + ; call missing(of _all_); stop; run;
NOTE: The data set WORK.ADSLSKEL has 0 observations and 48 variables.
NOTE: DATA statement used (Total process time):
real time 0.01 seconds
cpu time 0.01 seconds
57 /************************************************/
58 /*** END SECTION TO CREATE THE SHELL DATA SET ***/
59 /************************************************/# Load the ADSL specifications
specs_path <- "../data/define_richann.xlsx"
adsl_specs <- read_xlsx(specs_path, sheet = "ADSL")
# Define a mapping from spec types to R types
type_mapping <- c(
"text" = "character",
"integer" = "integer",
"float" = "double",
"datetime" = "Date"
)
# Map the types in the specs to R-compatible types
adsl_specs <- adsl_specs %>%
mutate(
Mapped_Type = type_mapping[Type] %>% replace_na("character")
)
# Create an empty shell based on the specifications
adsl_shell <- tibble()
for (i in seq_len(nrow(adsl_specs))) {
col_name <- adsl_specs$Variable[i]
col_type <- adsl_specs$Type[i]
adsl_shell[[col_name]] <- switch(
col_type,
"text" = character(),
"integer" = integer(),
"float" = numeric(),
"datetime" = as.Date(character()),
stop("Unsupported type")
)
attr(adsl_shell[[col_name]], "label") <- adsl_specs$Label[i] # PROC Transpose
}
str(adsl_shell)tibble [0 × 48] (S3: tbl_df/tbl/data.frame)
$ STUDYID : chr(0)
..- attr(*, "label")= chr "Study Identifier"
$ USUBJID : chr(0)
..- attr(*, "label")= chr "Unique Subject Identifier"
$ SUBJID : chr(0)
..- attr(*, "label")= chr "Subject Identifier for the Study"
$ SITEID : chr(0)
..- attr(*, "label")= chr "Study Site Identifier"
$ SITEGR1 : chr(0)
..- attr(*, "label")= chr "Pooled Site Group 1"
$ ARM : chr(0)
..- attr(*, "label")= chr "Description of Planned Arm"
$ TRT01P : chr(0)
..- attr(*, "label")= chr "Planned Treatment for Period 01"
$ TRT01PN : int(0)
..- attr(*, "label")= chr "Planned Treatment for Period 01 (N)"
$ TRT01A : chr(0)
..- attr(*, "label")= chr "Actual Treatment for Period 01"
$ TRT01AN : int(0)
..- attr(*, "label")= chr "Actual Treatment for Period 01 (N)"
$ TRTSDT : int(0)
..- attr(*, "label")= chr "Date of First Exposure to Treatment"
$ TRTEDT : int(0)
..- attr(*, "label")= chr "Date of Last Exposure to Treatment"
$ TRTDUR : int(0)
..- attr(*, "label")= chr "Duration of Treatment (days)"
$ AVGDD : num(0)
..- attr(*, "label")= chr "Avg Daily Dose (as planned)"
$ CUMDOSE : num(0)
..- attr(*, "label")= chr "Cumulative Dose (as planned)"
$ AGE : int(0)
..- attr(*, "label")= chr "Age"
$ AGEGR1 : chr(0)
..- attr(*, "label")= chr "Pooled Age Group 1"
$ AGEGR1N : int(0)
..- attr(*, "label")= chr "Pooled Age Group 1 (N)"
$ AGEU : chr(0)
..- attr(*, "label")= chr "Age Units"
$ RACE : chr(0)
..- attr(*, "label")= chr "Race"
$ RACEN : int(0)
..- attr(*, "label")= chr "Race (N)"
$ SEX : chr(0)
..- attr(*, "label")= chr "Sex"
$ ETHNIC : chr(0)
..- attr(*, "label")= chr "Ethnicity"
$ SAFFL : chr(0)
..- attr(*, "label")= chr "Safety Population Flag"
$ ITTFL : chr(0)
..- attr(*, "label")= chr "Intent-To-Treat Population Flag"
$ EFFFL : chr(0)
..- attr(*, "label")= chr "Efficacy Population Flag"
$ COMP8FL : chr(0)
..- attr(*, "label")= chr "Completers of Week 8 Population Flag"
$ COMP16FL: chr(0)
..- attr(*, "label")= chr "Completers of Week 16 Population Flag"
$ COMP24FL: chr(0)
..- attr(*, "label")= chr "Completers of Week 24 Population Flag"
$ DISCONFL: chr(0)
..- attr(*, "label")= chr "Did the Subject Discontinue the Study?"
$ DSRAEFL : chr(0)
..- attr(*, "label")= chr "Discontinued due to AE?"
$ DTHFL : chr(0)
..- attr(*, "label")= chr "Subject Died?"
$ BMIBL : num(0)
..- attr(*, "label")= chr "Baseline BMI (kg/m^2)"
$ BMIBLGR1: chr(0)
..- attr(*, "label")= chr "Pooled Baseline BMI Group 1"
$ HEIGHTBL: num(0)
..- attr(*, "label")= chr "Baseline Height (cm)"
$ WEIGHTBL: num(0)
..- attr(*, "label")= chr "Baseline Weight (kg)"
$ EDUCLVL : int(0)
..- attr(*, "label")= chr "Years of Education"
$ DISONSDT: int(0)
..- attr(*, "label")= chr "Date of Onset of Disease"
$ DURDIS : num(0)
..- attr(*, "label")= chr "Duration of Disease (Months)"
$ DURDSGR1: chr(0)
..- attr(*, "label")= chr "Pooled Disease Duration Group 1"
$ VISIT1DT: int(0)
..- attr(*, "label")= chr "Date of Visit 1"
$ RFSTDTC : 'Date' num(0)
- attr(*, "label")= chr "Subject Reference Start Date/Time"
$ RFENDTC : 'Date' num(0)
- attr(*, "label")= chr "Subject Reference End Date/Time"
$ VISNUMEN: int(0)
..- attr(*, "label")= chr "End of Trt Visit (Vis 12 or Early Term.)"
$ RFENDT : int(0)
..- attr(*, "label")= chr "Date of Discontinuation/Completion"
$ DCDECOD : chr(0)
..- attr(*, "label")= chr "Standardized Disposition Term"
$ DCREASCD: chr(0)
..- attr(*, "label")= chr "Reason for Discontinuation"
$ MMSETOT : int(0)
..- attr(*, "label")= chr "MMSE Total"
Data Retrieval
/**********************************************/
/*** BEGIN SECTION TO RETRIEVE ALL THE DATA ***/
/**********************************************/
/* demographic */
data src_dm (drop = __orig:);
set SDTM.DM (rename = (AGEU = __origageu RACE = __origrace ETHNIC = __origethnic));
where ARMCD ne 'Scrnfail';
length AGEU $5 RACE $32 ETHNIC $22 AGEGR1 $5;
AGEU = strip(__origageu);
RACE = strip(__origrace);
ETHNIC = strip(__origethnic);
if input(SITEID, best.) in (702 706 707 711 714 715 717) then SITEGR1 = '900';
else SITEGR1 = SITEID;
TRT01P = ARM;
if ARM =: 'Placebo' then TRT01PN = 0;
else if find(ARM, 'Low', 'i') then TRT01PN = 54;
else if find(ARM, 'High', 'i') then TRT01PN = 81;
if . < AGE < 65 then AGEGR1 = '<65';
else if 65 <= AGE <= 80 then AGEGR1 = '65-80';
else if AGE > 80 then AGEGR1 = '>80';
if not missing(AGEGR1) then AGEGR1N = whichc(first(AGEGR1), '<', '6', '>');
if not missing(RACE) then RACEN = whichc(substr(RACE, 1, 2), 'WH', 'BL', 'xx', 'xx', 'xx', 'AM', 'AS');
if not missing(ARMCD) then ITTFL = 'Y';
else ITTFL = 'N';
format RFENDT date9.;
if not missing(RFENDTC) then RFENDT = input(RFENDTC, e8601da.);
run;
/* disposition */
data src_ds (keep = USUBJID VISNUMEN DC: DISCONFL DSRAEFL);
set SDTM.DS;
by USUBJID;
retain VISNUMEN DCDECOD DCREASCD;
length DCDECOD $27 DCREASCD $18;
if first.USUBJID then call missing(VISNUMEN, DCDECOD, DCREASCD);
if DSCAT = 'DISPOSITION EVENT' then do;
if VISITNUM ^= 13 then VISNUMEN = VISITNUM;
else VISNUMEN = 12;
DCDECOD = DSDECOD;
if DSDECOD not in: ('STUDY' 'WITH' 'SCRE' 'LOST') then DCREASCD = tranwrd(propcase(DSDECOD), ' Of ', ' of ');
else if DSDECOD =: 'STUDY' then DCREASCD = 'Sponsor Decision';
else if DSDECOD =: 'WITH' then DCREASCD = 'Withdrew Consent';
else if DSDECOD =: 'SCRE' then DCREASCD = 'I/E Not Met';
else if DSDECOD =: 'LOST' then DCREASCD = 'Lost to Follow-up';
if DSTERM = 'PROTOCOL ENTRY CRITERIA NOT MET' then DCREASCD = 'I/E Not Met';
end;
if last.USUBJID;
if DCDECOD ^= 'COMPLETED' then DISCONFL = 'Y';
if DCDECOD = 'ADVERSE EVENT' then DSRAEFL = 'Y';
run;
/* baseline vitals */
proc sort data = SDTM.VS out = vs;
by USUBJID VSTESTCD;
where (VSTESTCD = 'HEIGHT' and VISITNUM = 1) or (VSTESTCD = 'WEIGHT' and VISITNUM = 3);
run;
proc transpose data = vs
out = src_vs (drop = _:)
suffix = BL;
by USUBJID;
id VSTESTCD;
var VSSTRESN;
run;
/* treatment start and subject visit */
data src_sv (keep = USUBJID VISIT1DT TRTSDT __vis:);
set SDTM.SV;
by USUBJID;
format VISIT1DT TRTSDT __vis4dt __vis8dt __vis10dt __vis12dt date9.;
retain VISIT1DT TRTSDT __vis4dt __vis8dt __vis10dt __vis12dt;
if first.USUBJID then call missing(VISIT1DT, TRTSDT, of __vis:);
if VISITNUM = 1 then VISIT1DT = input(SVSTDTC, e8601da.);
else if VISITNUM = 3 then TRTSDT = input(SVSTDTC, e8601da.);
else if VISITNUM = 4 then __vis4dt = input(SVSTDTC, e8601da.);
else if VISITNUM = 8 then __vis8dt = input(SVSTDTC, e8601da.);
else if VISITNUM = 10 then __vis10dt = input(SVSTDTC, e8601da.);
else if VISITNUM = 12 then __vis12dt = input(SVSTDTC, e8601da.);
if last.USUBJID;
run;
/* primary diagnosis */
data src_mh;
set SDTM.MH;
where MHCAT = 'PRIMARY DIAGNOSIS';
format DISONSDT date9.;
if not missing(MHSTDTC) then DISONSDT = input(MHSTDTC, e8601da.);
keep USUBJID DISONSDT;
run;
/* mini-mental state and ADAS-Cog and CIBIC post-baseline */
data src_qs;
set SDTM.QS;
by USUBJID;
retain MMSETOT __effalz __effcli;
if first.USUBJID then do;
MMSETOT = 0;
__effalz = 0;
__effcli = 0;
end;
if QSCAT =: 'MINI' then MMSETOT = sum(MMSETOT, input(QSORRES, best.));
if QSCAT =: 'ALZ' and VISITNUM > 3 then __effalz = 1;
if QSCAT =: 'CLI' and VISITNUM > 3 then __effcli = 1;
if last.USUBJID;
keep USUBJID MMSETOT __eff:;
run;
/* exposure */
data ex;
set SDTM.EX;
format exstdt exendt date9.;
if not missing(EXSTDTC) then exstdt = input(EXSTDTC, e8601da.);
if not missing(EXENDTC) then exendt = input(EXENDTC, e8601da.);
__visc = put(VISITNUM, Z2.);
run;
%macro extrans(suff = , var = );
proc transpose data = ex
out = ex_&suff (drop = _:)
prefix = EX
suffix = &suff;
by USUBJID;
var &var;
id __visc;
run;
%mend extrans;
%extrans(suff = ST, var = exstdt)
%extrans(suff = EN, var = exendt)
%extrans(suff = DS, var = EXDOSE)
data src_ex;
merge ex_:;
by USUBJID;
format TRTEDT date9.;
if not missing(EX12ST) then TRTEDT = EX12EN;
else if not missing(EX04ST) then TRTEDT = EX04EN;
else if not missing(EX03ST) then TRTEDT = EX03EN;
run;
/********************************************/
/*** END SECTION TO RETRIEVE ALL THE DATA ***/
/********************************************/1 /**********************************************/
2 /*** BEGIN SECTION TO RETRIEVE ALL THE DATA ***/
3 /**********************************************/
4 /* demographic */
5 data src_dm (drop = __orig:);
6 set SDTM.DM (rename = (AGEU = __origageu RACE = __origrace ETHNIC = __origethnic));
7 where ARMCD ne 'Scrnfail';
8 length AGEU $5 RACE $32 ETHNIC $22 AGEGR1 $5;
9 AGEU = strip(__origageu);
10 RACE = strip(__origrace);
11 ETHNIC = strip(__origethnic);
12
13 if input(SITEID, best.) in (702 706 707 711 714 715 717) then SITEGR1 = '900';
14 else SITEGR1 = SITEID;
15 TRT01P = ARM;
16 if ARM =: 'Placebo' then TRT01PN = 0;
17 else if find(ARM, 'Low', 'i') then TRT01PN = 54;
18 else if find(ARM, 'High', 'i') then TRT01PN = 81;
19
20 if . < AGE < 65 then AGEGR1 = '<65';
21 else if 65 <= AGE <= 80 then AGEGR1 = '65-80';
22 else if AGE > 80 then AGEGR1 = '>80';
23 if not missing(AGEGR1) then AGEGR1N = whichc(first(AGEGR1), '<', '6', '>');
24
25 if not missing(RACE) then RACEN = whichc(substr(RACE, 1, 2), 'WH', 'BL', 'xx', 'xx', 'xx', 'AM', 'AS');
26
27 if not missing(ARMCD) then ITTFL = 'Y';
28 else ITTFL = 'N';
2 The SAS System 20:17 Monday, March 3, 2025
29
30 format RFENDT date9.;
31 if not missing(RFENDTC) then RFENDT = input(RFENDTC, e8601da.);
32 run;
NOTE: There were 254 observations read from the data set SDTM.DM.
WHERE ARMCD not = 'Scrnfail';
NOTE: The data set WORK.SRC_DM has 254 observations and 33 variables.
NOTE: DATA statement used (Total process time):
real time 0.05 seconds
cpu time 0.04 seconds
33
34 /* disposition */
35 data src_ds (keep = USUBJID VISNUMEN DC: DISCONFL DSRAEFL);
36 set SDTM.DS;
37 by USUBJID;
38 retain VISNUMEN DCDECOD DCREASCD;
39 length DCDECOD $27 DCREASCD $18;
40 if first.USUBJID then call missing(VISNUMEN, DCDECOD, DCREASCD);
41
42 if DSCAT = 'DISPOSITION EVENT' then do;
43 if VISITNUM ^= 13 then VISNUMEN = VISITNUM;
44 else VISNUMEN = 12;
45
46 DCDECOD = DSDECOD;
47 if DSDECOD not in: ('STUDY' 'WITH' 'SCRE' 'LOST') then DCREASCD = tranwrd(propcase(DSDECOD), ' Of ', ' of ');
48 else if DSDECOD =: 'STUDY' then DCREASCD = 'Sponsor Decision';
49 else if DSDECOD =: 'WITH' then DCREASCD = 'Withdrew Consent';
50 else if DSDECOD =: 'SCRE' then DCREASCD = 'I/E Not Met';
51 else if DSDECOD =: 'LOST' then DCREASCD = 'Lost to Follow-up';
52
53 if DSTERM = 'PROTOCOL ENTRY CRITERIA NOT MET' then DCREASCD = 'I/E Not Met';
54 end;
55 if last.USUBJID;
56 if DCDECOD ^= 'COMPLETED' then DISCONFL = 'Y';
57 if DCDECOD = 'ADVERSE EVENT' then DSRAEFL = 'Y';
58 run;
NOTE: There were 596 observations read from the data set SDTM.DS.
NOTE: The data set WORK.SRC_DS has 306 observations and 6 variables.
NOTE: DATA statement used (Total process time):
real time 0.02 seconds
cpu time 0.00 seconds
59
60 /* baseline vitals */
61 proc sort data = SDTM.VS out = vs;
62 by USUBJID VSTESTCD;
63 where (VSTESTCD = 'HEIGHT' and VISITNUM = 1) or (VSTESTCD = 'WEIGHT' and VISITNUM = 3);
64 run;
NOTE: There were 507 observations read from the data set SDTM.VS.
WHERE ((VSTESTCD='HEIGHT') and (VISITNUM=1)) or ((VSTESTCD='WEIGHT') and (VISITNUM=3));
NOTE: The data set WORK.VS has 507 observations and 24 variables.
NOTE: PROCEDURE SORT used (Total process time):
3 The SAS System 20:17 Monday, March 3, 2025
real time 0.06 seconds
cpu time 0.03 seconds
65
66 proc transpose data = vs
67 out = src_vs (drop = _:)
68 suffix = BL;
69 by USUBJID;
70 id VSTESTCD;
71 var VSSTRESN;
72 run;
NOTE: There were 507 observations read from the data set WORK.VS.
NOTE: The data set WORK.SRC_VS has 254 observations and 3 variables.
NOTE: PROCEDURE TRANSPOSE used (Total process time):
real time 0.03 seconds
cpu time 0.03 seconds
73
74 /* treatment start and subject visit */
75 data src_sv (keep = USUBJID VISIT1DT TRTSDT __vis:);
76 set SDTM.SV;
77 by USUBJID;
78 format VISIT1DT TRTSDT __vis4dt __vis8dt __vis10dt __vis12dt date9.;
79 retain VISIT1DT TRTSDT __vis4dt __vis8dt __vis10dt __vis12dt;
80 if first.USUBJID then call missing(VISIT1DT, TRTSDT, of __vis:);
81 if VISITNUM = 1 then VISIT1DT = input(SVSTDTC, e8601da.);
82 else if VISITNUM = 3 then TRTSDT = input(SVSTDTC, e8601da.);
83 else if VISITNUM = 4 then __vis4dt = input(SVSTDTC, e8601da.);
84 else if VISITNUM = 8 then __vis8dt = input(SVSTDTC, e8601da.);
85 else if VISITNUM = 10 then __vis10dt = input(SVSTDTC, e8601da.);
86 else if VISITNUM = 12 then __vis12dt = input(SVSTDTC, e8601da.);
87 if last.USUBJID;
88 run;
NOTE: There were 3559 observations read from the data set SDTM.SV.
NOTE: The data set WORK.SRC_SV has 306 observations and 7 variables.
NOTE: DATA statement used (Total process time):
real time 0.01 seconds
cpu time 0.01 seconds
89
90 /* primary diagnosis */
91 data src_mh;
92 set SDTM.MH;
93 where MHCAT = 'PRIMARY DIAGNOSIS';
94 format DISONSDT date9.;
95 if not missing(MHSTDTC) then DISONSDT = input(MHSTDTC, e8601da.);
96 keep USUBJID DISONSDT;
97 run;
NOTE: There were 254 observations read from the data set SDTM.MH.
WHERE MHCAT='PRIMARY DIAGNOSIS';
NOTE: The data set WORK.SRC_MH has 254 observations and 2 variables.
NOTE: DATA statement used (Total process time):
4 The SAS System 20:17 Monday, March 3, 2025
real time 0.01 seconds
cpu time 0.01 seconds
98
99 /* mini-mental state and ADAS-Cog and CIBIC post-baseline */
100 data src_qs;
101 set SDTM.QS;
102 by USUBJID;
103 retain MMSETOT __effalz __effcli;
104 if first.USUBJID then do;
105 MMSETOT = 0;
106 __effalz = 0;
107 __effcli = 0;
108 end;
109 if QSCAT =: 'MINI' then MMSETOT = sum(MMSETOT, input(QSORRES, best.));
110 if QSCAT =: 'ALZ' and VISITNUM > 3 then __effalz = 1;
111 if QSCAT =: 'CLI' and VISITNUM > 3 then __effcli = 1;
112 if last.USUBJID;
113 keep USUBJID MMSETOT __eff:;
114 run;
NOTE: There were 121749 observations read from the data set SDTM.QS.
NOTE: The data set WORK.SRC_QS has 254 observations and 4 variables.
NOTE: DATA statement used (Total process time):
real time 0.05 seconds
cpu time 0.04 seconds
115
116 /* exposure */
117 data ex;
118 set SDTM.EX;
119 format exstdt exendt date9.;
120 if not missing(EXSTDTC) then exstdt = input(EXSTDTC, e8601da.);
121 if not missing(EXENDTC) then exendt = input(EXENDTC, e8601da.);
122 __visc = put(VISITNUM, Z2.);
123 run;
NOTE: There were 591 observations read from the data set SDTM.EX.
NOTE: The data set WORK.EX has 591 observations and 20 variables.
NOTE: DATA statement used (Total process time):
real time 0.03 seconds
cpu time 0.00 seconds
124
125 %macro extrans(suff = , var = );
126 proc transpose data = ex
127 out = ex_&suff (drop = _:)
128 prefix = EX
129 suffix = &suff;
130 by USUBJID;
131 var &var;
132 id __visc;
133 run;
134 %mend extrans;
135
5 The SAS System 20:17 Monday, March 3, 2025
136 %extrans(suff = ST, var = exstdt)
NOTE: There were 591 observations read from the data set WORK.EX.
NOTE: The data set WORK.EX_ST has 254 observations and 4 variables.
NOTE: PROCEDURE TRANSPOSE used (Total process time):
real time 0.04 seconds
cpu time 0.03 seconds
137 %extrans(suff = EN, var = exendt)
NOTE: There were 591 observations read from the data set WORK.EX.
NOTE: The data set WORK.EX_EN has 254 observations and 4 variables.
NOTE: PROCEDURE TRANSPOSE used (Total process time):
real time 0.02 seconds
cpu time 0.01 seconds
138 %extrans(suff = DS, var = EXDOSE)
NOTE: There were 591 observations read from the data set WORK.EX.
NOTE: The data set WORK.EX_DS has 254 observations and 4 variables.
NOTE: PROCEDURE TRANSPOSE used (Total process time):
real time 0.02 seconds
cpu time 0.03 seconds
139
140 data src_ex;
141 merge ex_:;
142 by USUBJID;
143
144 format TRTEDT date9.;
145 if not missing(EX12ST) then TRTEDT = EX12EN;
146 else if not missing(EX04ST) then TRTEDT = EX04EN;
147 else if not missing(EX03ST) then TRTEDT = EX03EN;
148 run;
NOTE: There were 254 observations read from the data set WORK.EX_DS.
NOTE: There were 254 observations read from the data set WORK.EX_EN.
NOTE: There were 254 observations read from the data set WORK.EX_ST.
NOTE: The data set WORK.SRC_EX has 254 observations and 11 variables.
NOTE: DATA statement used (Total process time):
real time 0.03 seconds
cpu time 0.01 seconds
149 /********************************************/
150 /*** END SECTION TO RETRIEVE ALL THE DATA ***/
151 /********************************************/EX_EN: 254 observations (Exposure End Dates on one record per subject)
EX_DS: 254 observations (Exposure Dose Level on one record per subject)
# -----------------------------------------------
# Load CDISC Pilot SDTM Data
# -----------------------------------------------
# -----------------------------------------------
# Define QS File Paths
# -----------------------------------------------
qs_files <- list(
qsco = "../data/qsco.xpt",
qsda = "../data/qsda.xpt",
qsgi = "../data/qsgi.xpt",
qshi = "../data/qshi.xpt",
qsmm = "../data/qsmm.xpt",
qsni = "../data/qsni.xpt"
)
# -----------------------------------------------
# Load All QS Files into a List
# -----------------------------------------------
qs_list <- lapply(qs_files, read_xpt)
# -----------------------------------------------
# Combine All QS Files into a Single Dataset
# -----------------------------------------------
qs_all <- bind_rows(qs_list)
write_xpt(qs_all, "../data/qs_all.xpt")
# Define paths to SDTM datasets (questionnaire variables removed)
sdtm_paths <- list(
dm = "../data/dm.xpt", # Demographics
ae = "../data/ae.xpt", # Adverse Events
se = "../data/se.xpt", # Subject Elements
ex = "../data/ex.xpt", # Exposure
vs = "../data/vs.xpt", # Vital Signs
sc = "../data/sc.xpt", # Subject Characteristics
mh = "../data/mh.xpt", # Medical History
ds = "../data/ds.xpt", # Disposition
sv = "../data/sv.xpt", # Subject Visits
qs = "../data/qs_all.xpt" # Combined Questionnaire Data
)
# Load datasets into a named list
sdtm_data <- lapply(sdtm_paths, haven::read_xpt)
names(sdtm_data) <- names(sdtm_paths)
str(sdtm_data) # Looks GoodList of 10
$ dm: tibble [306 × 25] (S3: tbl_df/tbl/data.frame)
..$ STUDYID : chr [1:306] "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" ...
.. ..- attr(*, "label")= chr "Study Identifier"
..$ DOMAIN : chr [1:306] "DM" "DM" "DM" "DM" ...
.. ..- attr(*, "label")= chr "Domain Abbreviation"
..$ USUBJID : chr [1:306] "01-701-1015" "01-701-1023" "01-701-1028" "01-701-1033" ...
.. ..- attr(*, "label")= chr "Unique Subject Identifier"
..$ SUBJID : chr [1:306] "1015" "1023" "1028" "1033" ...
.. ..- attr(*, "label")= chr "Subject Identifier for the Study"
..$ RFSTDTC : chr [1:306] "2014-01-02" "2012-08-05" "2013-07-19" "2014-03-18" ...
.. ..- attr(*, "label")= chr "Subject Reference Start Date/Time"
..$ RFENDTC : chr [1:306] "2014-07-02" "2012-09-02" "2014-01-14" "2014-04-14" ...
.. ..- attr(*, "label")= chr "Subject Reference End Date/Time"
..$ RFXSTDTC: chr [1:306] "2014-01-02" "2012-08-05" "2013-07-19" "2014-03-18" ...
.. ..- attr(*, "label")= chr "Date/Time of First Study Treatment"
..$ RFXENDTC: chr [1:306] "2014-07-02" "2012-09-01" "2014-01-14" "2014-03-31" ...
.. ..- attr(*, "label")= chr "Date/Time of Last Study Treatment"
..$ RFICDTC : chr [1:306] "" "" "" "" ...
.. ..- attr(*, "label")= chr "Date/Time of Informed Consent"
..$ RFPENDTC: chr [1:306] "2014-07-02T11:45" "2013-02-18" "2014-01-14T11:10" "2014-09-15" ...
.. ..- attr(*, "label")= chr "Date/Time of End of Participation"
..$ DTHDTC : chr [1:306] "" "" "" "" ...
.. ..- attr(*, "label")= chr "Date/Time of Death"
..$ DTHFL : chr [1:306] "" "" "" "" ...
.. ..- attr(*, "label")= chr "Subject Death Flag"
..$ SITEID : chr [1:306] "701" "701" "701" "701" ...
.. ..- attr(*, "label")= chr "Study Site Identifier"
..$ AGE : num [1:306] 63 64 71 74 77 85 59 68 81 84 ...
.. ..- attr(*, "label")= chr "Age"
..$ AGEU : chr [1:306] "YEARS" "YEARS" "YEARS" "YEARS" ...
.. ..- attr(*, "label")= chr "Age Units"
..$ SEX : chr [1:306] "F" "M" "M" "M" ...
.. ..- attr(*, "label")= chr "Sex"
..$ RACE : chr [1:306] "WHITE" "WHITE" "WHITE" "WHITE" ...
.. ..- attr(*, "label")= chr "Race"
..$ ETHNIC : chr [1:306] "HISPANIC OR LATINO" "HISPANIC OR LATINO" "NOT HISPANIC OR LATINO" "NOT HISPANIC OR LATINO" ...
.. ..- attr(*, "label")= chr "Ethnicity"
..$ ARMCD : chr [1:306] "Pbo" "Pbo" "Xan_Hi" "Xan_Lo" ...
.. ..- attr(*, "label")= chr "Planned Arm Code"
..$ ARM : chr [1:306] "Placebo" "Placebo" "Xanomeline High Dose" "Xanomeline Low Dose" ...
.. ..- attr(*, "label")= chr "Description of Planned Arm"
..$ ACTARMCD: chr [1:306] "Pbo" "Pbo" "Xan_Hi" "Xan_Lo" ...
.. ..- attr(*, "label")= chr "Actual Arm Code"
..$ ACTARM : chr [1:306] "Placebo" "Placebo" "Xanomeline High Dose" "Xanomeline Low Dose" ...
.. ..- attr(*, "label")= chr "Description of Actual Arm"
..$ COUNTRY : chr [1:306] "USA" "USA" "USA" "USA" ...
.. ..- attr(*, "label")= chr "Country"
..$ DMDTC : chr [1:306] "2013-12-26" "2012-07-22" "2013-07-11" "2014-03-10" ...
.. ..- attr(*, "label")= chr "Date/Time of Collection"
..$ DMDY : num [1:306] -7 -14 -8 -8 -7 -21 NA -9 -13 -7 ...
.. ..- attr(*, "label")= chr "Study Day of Collection"
$ ae: tibble [961 × 37] (S3: tbl_df/tbl/data.frame)
..$ STUDYID : chr [1:961] "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" ...
.. ..- attr(*, "label")= chr "Study Identifier"
..$ DOMAIN : chr [1:961] "AE" "AE" "AE" "AE" ...
.. ..- attr(*, "label")= chr "Domain Abbreviation"
..$ USUBJID : chr [1:961] "01-701-1015" "01-701-1015" "01-701-1015" "01-701-1023" ...
.. ..- attr(*, "label")= chr "Unique Subject Identifier"
..$ AESEQ : num [1:961] 1 2 3 3 2 4 1 2 1 2 ...
.. ..- attr(*, "label")= chr "Sequence Number"
..$ AESPID : chr [1:961] "E07" "E08" "E06" "E10" ...
.. ..- attr(*, "label")= chr "Sponsor-Defined Identifier"
..$ AETERM : chr [1:961] "APPLICATION SITE ERYTHEMA" "APPLICATION SITE PRURITUS" "DIARRHOEA" "ATRIOVENTRICULAR BLOCK SECOND DEGREE" ...
.. ..- attr(*, "label")= chr "Reported Term for the Adverse Event"
..$ AELLT : chr [1:961] "APPLICATION SITE REDNESS" "APPLICATION SITE ITCHING" "DIARRHEA" "AV BLOCK SECOND DEGREE" ...
.. ..- attr(*, "label")= chr "Lowest Level Term"
..$ AELLTCD : num [1:961] NA NA NA NA NA NA NA NA NA NA ...
.. ..- attr(*, "label")= chr "Lowest Level Term Code"
..$ AEDECOD : chr [1:961] "APPLICATION SITE ERYTHEMA" "APPLICATION SITE PRURITUS" "DIARRHOEA" "ATRIOVENTRICULAR BLOCK SECOND DEGREE" ...
.. ..- attr(*, "label")= chr "Dictionary-Derived Term"
..$ AEPTCD : num [1:961] NA NA NA NA NA NA NA NA NA NA ...
.. ..- attr(*, "label")= chr "Preferred Term Code"
..$ AEHLT : chr [1:961] "HLT_0617" "HLT_0317" "HLT_0148" "HLT_0415" ...
.. ..- attr(*, "label")= chr "High Level Term"
..$ AEHLTCD : num [1:961] NA NA NA NA NA NA NA NA NA NA ...
.. ..- attr(*, "label")= chr "High Level Term Code"
..$ AEHLGT : chr [1:961] "HLGT_0152" "HLGT_0338" "HLGT_0588" "HLGT_0086" ...
.. ..- attr(*, "label")= chr "High Level Group Term"
..$ AEHLGTCD: num [1:961] NA NA NA NA NA NA NA NA NA NA ...
.. ..- attr(*, "label")= chr "High Level Group Term Code"
..$ AEBODSYS: chr [1:961] "GENERAL DISORDERS AND ADMINISTRATION SITE CONDITIONS" "GENERAL DISORDERS AND ADMINISTRATION SITE CONDITIONS" "GASTROINTESTINAL DISORDERS" "CARDIAC DISORDERS" ...
.. ..- attr(*, "label")= chr "Body System or Organ Class"
..$ AEBDSYCD: num [1:961] NA NA NA NA NA NA NA NA NA NA ...
.. ..- attr(*, "label")= chr "Body System or Organ Class Code"
..$ AESOC : chr [1:961] "GENERAL DISORDERS AND ADMINISTRATION SITE CONDITIONS" "GENERAL DISORDERS AND ADMINISTRATION SITE CONDITIONS" "GASTROINTESTINAL DISORDERS" "CARDIAC DISORDERS" ...
.. ..- attr(*, "label")= chr "Primary System Organ Class"
..$ AESOCCD : num [1:961] NA NA NA NA NA NA NA NA NA NA ...
.. ..- attr(*, "label")= chr "Primary System Organ Class Code"
..$ AESEV : chr [1:961] "MILD" "MILD" "MILD" "MILD" ...
.. ..- attr(*, "label")= chr "Severity/Intensity"
..$ AESER : chr [1:961] "N" "N" "N" "N" ...
.. ..- attr(*, "label")= chr "Serious Event"
..$ AEACN : chr [1:961] "" "" "" "" ...
.. ..- attr(*, "label")= chr "Action Taken with Study Treatment"
..$ AEREL : chr [1:961] "PROBABLE" "PROBABLE" "REMOTE" "POSSIBLE" ...
.. ..- attr(*, "label")= chr "Causality"
..$ AEOUT : chr [1:961] "NOT RECOVERED/NOT RESOLVED" "NOT RECOVERED/NOT RESOLVED" "RECOVERED/RESOLVED" "NOT RECOVERED/NOT RESOLVED" ...
.. ..- attr(*, "label")= chr "Outcome of Adverse Event"
..$ AESCAN : chr [1:961] "N" "N" "N" "N" ...
.. ..- attr(*, "label")= chr "Involves Cancer"
..$ AESCONG : chr [1:961] "N" "N" "N" "N" ...
.. ..- attr(*, "label")= chr "Congenital Anomaly or Birth Defect"
..$ AESDISAB: chr [1:961] "N" "N" "N" "N" ...
.. ..- attr(*, "label")= chr "Persist or Signif Disability/Incapacity"
..$ AESDTH : chr [1:961] "N" "N" "N" "N" ...
.. ..- attr(*, "label")= chr "Results in Death"
..$ AESHOSP : chr [1:961] "N" "N" "N" "N" ...
.. ..- attr(*, "label")= chr "Requires or Prolongs Hospitalization"
..$ AESLIFE : chr [1:961] "N" "N" "N" "N" ...
.. ..- attr(*, "label")= chr "Is Life Threatening"
..$ AESOD : chr [1:961] "N" "N" "N" "N" ...
.. ..- attr(*, "label")= chr "Occurred with Overdose"
..$ EPOCH : chr [1:961] "TREATMENT" "TREATMENT" "TREATMENT" "TREATMENT" ...
.. ..- attr(*, "label")= chr "Epoch"
..$ AEDTC : chr [1:961] "2014-01-16" "2014-01-16" "2014-01-16" "2012-08-27" ...
.. ..- attr(*, "label")= chr "Date/Time of Collection"
..$ AESTDTC : chr [1:961] "2014-01-03" "2014-01-03" "2014-01-09" "2012-08-26" ...
.. ..- attr(*, "label")= chr "Start Date/Time of Adverse Event"
..$ AEENDTC : chr [1:961] "" "" "2014-01-11" "" ...
.. ..- attr(*, "label")= chr "End Date/Time of Adverse Event"
..$ AEDY : num [1:961] 15 15 15 23 23 29 14 27 87 141 ...
.. ..- attr(*, "label")= chr "Study Day of Visit/Collection/Exam"
..$ AESTDY : num [1:961] 2 2 8 22 3 3 3 21 58 125 ...
.. ..- attr(*, "label")= chr "Study Day of Start of Adverse Event"
..$ AEENDY : num [1:961] NA NA 10 NA NA 26 NA NA NA NA ...
.. ..- attr(*, "label")= chr "Study Day of End of Adverse Event"
$ se: tibble [752 × 12] (S3: tbl_df/tbl/data.frame)
..$ STUDYID: chr [1:752] "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" ...
.. ..- attr(*, "label")= chr "Study Identifier"
..$ DOMAIN : chr [1:752] "SE" "SE" "SE" "SE" ...
.. ..- attr(*, "label")= chr "Domain Abbreviation"
..$ USUBJID: chr [1:752] "01-701-1015" "01-701-1015" "01-701-1023" "01-701-1023" ...
.. ..- attr(*, "label")= chr "Unique Subject Identifier"
..$ SESEQ : num [1:752] 1 4 1 4 6 1 3 4 5 1 ...
.. ..- attr(*, "label")= chr "Sequence Number"
..$ ETCD : chr [1:752] "SCRN" "PBO" "SCRN" "PBO" ...
.. ..- attr(*, "label")= chr "Element Code"
..$ ELEMENT: chr [1:752] "Screen" "Placebo" "Screen" "Placebo" ...
.. ..- attr(*, "label")= chr "Description of Element"
..$ SEUPDES: chr [1:752] "" "" "" "" ...
.. ..- attr(*, "label")= chr "Description of Unplanned Element"
..$ EPOCH : chr [1:752] "SCREENING" "TREATMENT" "SCREENING" "TREATMENT" ...
.. ..- attr(*, "label")= chr "Epoch"
..$ SESTDTC: chr [1:752] "2013-12-26" "2014-01-02" "2012-07-22" "2012-08-05" ...
.. ..- attr(*, "label")= chr "Start Date/Time of Element"
..$ SEENDTC: chr [1:752] "2014-01-02" "2014-07-02" "2012-08-05" "2013-02-18" ...
.. ..- attr(*, "label")= chr "End Date/Time of Element"
..$ SESTDY : num [1:752] -7 1 -14 1 198 -8 1 14 172 -8 ...
.. ..- attr(*, "label")= chr "Study Day of Start of Observation"
..$ SEENDY : num [1:752] 1 182 1 198 198 1 14 172 180 1 ...
.. ..- attr(*, "label")= chr "Study Day of End of Observation"
$ ex: tibble [591 × 18] (S3: tbl_df/tbl/data.frame)
..$ STUDYID : chr [1:591] "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" ...
.. ..- attr(*, "label")= chr "Study Identifier"
.. ..- attr(*, "format.sas")= chr "$12"
..$ DOMAIN : chr [1:591] "EX" "EX" "EX" "EX" ...
.. ..- attr(*, "label")= chr "Domain Abbreviation"
.. ..- attr(*, "format.sas")= chr "$2"
..$ USUBJID : chr [1:591] "01-701-1015" "01-701-1015" "01-701-1015" "01-701-1023" ...
.. ..- attr(*, "label")= chr "Unique Subject Identifier"
.. ..- attr(*, "format.sas")= chr "$11"
..$ EXSEQ : num [1:591] 1 2 3 1 2 1 2 3 1 1 ...
.. ..- attr(*, "label")= chr "Sequence Number"
..$ EXTRT : chr [1:591] "PLACEBO" "PLACEBO" "PLACEBO" "PLACEBO" ...
.. ..- attr(*, "label")= chr "Name of Treatment"
.. ..- attr(*, "format.sas")= chr "$10"
..$ EXDOSE : num [1:591] 0 0 0 0 0 54 81 54 54 54 ...
.. ..- attr(*, "label")= chr "Dose"
..$ EXDOSU : chr [1:591] "mg" "mg" "mg" "mg" ...
.. ..- attr(*, "label")= chr "Dose Units"
.. ..- attr(*, "format.sas")= chr "$2"
..$ EXDOSFRM: chr [1:591] "PATCH" "PATCH" "PATCH" "PATCH" ...
.. ..- attr(*, "label")= chr "Dose Form"
.. ..- attr(*, "format.sas")= chr "$5"
..$ EXDOSFRQ: chr [1:591] "QD" "QD" "QD" "QD" ...
.. ..- attr(*, "label")= chr "Dosing Frequency per Interval"
.. ..- attr(*, "format.sas")= chr "$2"
..$ EXROUTE : chr [1:591] "TRANSDERMAL" "TRANSDERMAL" "TRANSDERMAL" "TRANSDERMAL" ...
.. ..- attr(*, "label")= chr "Route of Administration"
.. ..- attr(*, "format.sas")= chr "$11"
..$ VISITNUM: num [1:591] 3 4 12 3 4 3 4 12 3 3 ...
.. ..- attr(*, "label")= chr "Visit Number"
..$ VISIT : chr [1:591] "BASELINE" "WEEK 2" "WEEK 24" "BASELINE" ...
.. ..- attr(*, "label")= chr "Visit Name"
.. ..- attr(*, "format.sas")= chr "$8"
..$ VISITDY : num [1:591] 1 14 168 1 14 1 14 168 1 1 ...
.. ..- attr(*, "label")= chr "Planned Study Day of Visit"
..$ EPOCH : chr [1:591] "TREATMENT" "TREATMENT" "TREATMENT" "TREATMENT" ...
.. ..- attr(*, "label")= chr "Epoch"
.. ..- attr(*, "format.sas")= chr "$9"
..$ EXSTDTC : chr [1:591] "2014-01-02" "2014-01-17" "2014-06-19" "2012-08-05" ...
.. ..- attr(*, "label")= chr "Start Date/Time of Treatment"
.. ..- attr(*, "format.sas")= chr "$10"
..$ EXENDTC : chr [1:591] "2014-01-16" "2014-06-18" "2014-07-02" "2012-08-27" ...
.. ..- attr(*, "label")= chr "End Date/Time of Treatment"
.. ..- attr(*, "format.sas")= chr "$10"
..$ EXSTDY : num [1:591] 1 16 169 1 24 1 15 173 1 1 ...
.. ..- attr(*, "label")= chr "Study Day of Start of Treatment"
..$ EXENDY : num [1:591] 15 168 182 23 28 14 172 180 14 15 ...
.. ..- attr(*, "label")= chr "Study Day of End of Treatment"
$ vs: tibble [29,643 × 25] (S3: tbl_df/tbl/data.frame)
..$ STUDYID : chr [1:29643] "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" ...
.. ..- attr(*, "label")= chr "Study Identifier"
..$ DOMAIN : chr [1:29643] "VS" "VS" "VS" "VS" ...
.. ..- attr(*, "label")= chr "Domain Abbreviation"
..$ USUBJID : chr [1:29643] "01-701-1015" "01-701-1015" "01-701-1015" "01-701-1015" ...
.. ..- attr(*, "label")= chr "Unique Subject Identifier"
..$ VSSEQ : num [1:29643] 1 2 3 4 5 6 7 8 9 10 ...
.. ..- attr(*, "label")= chr "Sequence Number"
..$ VSTESTCD: chr [1:29643] "DIABP" "DIABP" "DIABP" "DIABP" ...
.. ..- attr(*, "label")= chr "Vital Signs Test Short Name"
..$ VSTEST : chr [1:29643] "Diastolic Blood Pressure" "Diastolic Blood Pressure" "Diastolic Blood Pressure" "Diastolic Blood Pressure" ...
.. ..- attr(*, "label")= chr "Vital Signs Test Name"
..$ VSPOS : chr [1:29643] "SUPINE" "STANDING" "STANDING" "SUPINE" ...
.. ..- attr(*, "label")= chr "Vital Signs Position of Subject"
..$ VSORRES : chr [1:29643] "64" "83" "57" "68" ...
.. ..- attr(*, "label")= chr "Result or Finding in Original Units"
..$ VSORRESU: chr [1:29643] "mmHg" "mmHg" "mmHg" "mmHg" ...
.. ..- attr(*, "label")= chr "Original Units"
..$ VSSTRESC: chr [1:29643] "64" "83" "57" "68" ...
.. ..- attr(*, "label")= chr "Character Result/Finding in Std Format"
..$ VSSTRESN: num [1:29643] 64 83 57 68 59 71 56 51 61 67 ...
.. ..- attr(*, "label")= chr "Numeric Result/Finding in Standard Units"
..$ VSSTRESU: chr [1:29643] "mmHg" "mmHg" "mmHg" "mmHg" ...
.. ..- attr(*, "label")= chr "Standard Units"
..$ VSSTAT : chr [1:29643] "" "" "" "" ...
.. ..- attr(*, "label")= chr "Completion Status"
..$ VSLOC : chr [1:29643] "" "" "" "" ...
.. ..- attr(*, "label")= chr "Location of Vital Signs Measurement"
..$ VSBLFL : chr [1:29643] "" "" "" "" ...
.. ..- attr(*, "label")= chr "Baseline Flag"
..$ VISITNUM: num [1:29643] 1 1 1 2 2 2 3 3 3 3.5 ...
.. ..- attr(*, "label")= chr "Visit Number"
..$ VISIT : chr [1:29643] "SCREENING 1" "SCREENING 1" "SCREENING 1" "SCREENING 2" ...
.. ..- attr(*, "label")= chr "Visit Name"
..$ VISITDY : num [1:29643] -7 -7 -7 -1 -1 -1 1 1 1 13 ...
.. ..- attr(*, "label")= chr "Planned Study Day of Visit"
..$ EPOCH : chr [1:29643] "SCREENING" "SCREENING" "SCREENING" "SCREENING" ...
.. ..- attr(*, "label")= chr "Epoch"
..$ VSDTC : chr [1:29643] "2013-12-26" "2013-12-26" "2013-12-26" "2013-12-31" ...
.. ..- attr(*, "label")= chr "Date/Time of Measurements"
..$ VSDY : num [1:29643] -7 -7 -7 -2 -2 -2 1 1 1 13 ...
.. ..- attr(*, "label")= chr "Study Day of Vital Signs"
..$ VSTPT : chr [1:29643] "AFTER LYING DOWN FOR 5 MINUTES" "AFTER STANDING FOR 1 MINUTE" "AFTER STANDING FOR 3 MINUTES" "AFTER LYING DOWN FOR 5 MINUTES" ...
.. ..- attr(*, "label")= chr "Planned Time Point Name"
..$ VSTPTNUM: num [1:29643] 815 816 817 815 816 817 815 816 817 815 ...
.. ..- attr(*, "label")= chr "Planned Time Point Number"
..$ VSELTM : chr [1:29643] "PT5M" "PT1M" "PT3M" "PT5M" ...
.. ..- attr(*, "label")= chr "Planned Elapsed Time from Time Point Ref"
..$ VSTPTREF: chr [1:29643] "PATIENT SUPINE" "PATIENT STANDING" "PATIENT STANDING" "PATIENT SUPINE" ...
.. ..- attr(*, "label")= chr "Time Point Reference"
$ sc: tibble [254 × 14] (S3: tbl_df/tbl/data.frame)
..$ STUDYID : chr [1:254] "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" ...
.. ..- attr(*, "label")= chr "Study Identifier"
..$ DOMAIN : chr [1:254] "SC" "SC" "SC" "SC" ...
.. ..- attr(*, "label")= chr "Domain Abbreviation"
..$ USUBJID : chr [1:254] "01-701-1015" "01-701-1023" "01-701-1028" "01-701-1033" ...
.. ..- attr(*, "label")= chr "Unique Subject Identifier"
..$ SCSEQ : num [1:254] 1 1 1 1 1 1 1 1 1 1 ...
.. ..- attr(*, "label")= chr "Sequence Number"
..$ SCTESTCD: chr [1:254] "EDULEVEL" "EDULEVEL" "EDULEVEL" "EDULEVEL" ...
.. ..- attr(*, "label")= chr "Subject Characteristic Short Name"
..$ SCTEST : chr [1:254] "Level of Education Attained" "Level of Education Attained" "Level of Education Attained" "Level of Education Attained" ...
.. ..- attr(*, "label")= chr "Subject Characteristic"
..$ SCCAT : chr [1:254] "EDUCATION" "EDUCATION" "EDUCATION" "EDUCATION" ...
.. ..- attr(*, "label")= chr "Category for Subject Characteristic"
..$ SCORRES : chr [1:254] "16" "14" "16" "12" ...
.. ..- attr(*, "label")= chr "Result or Finding in Original Units"
..$ SCORRESU: chr [1:254] "YEARS" "YEARS" "YEARS" "YEARS" ...
.. ..- attr(*, "label")= chr "Original Units"
..$ SCSTRESC: chr [1:254] "16" "14" "16" "12" ...
.. ..- attr(*, "label")= chr "Character Result/Finding in Std Format"
..$ SCSTRESN: num [1:254] 16 14 16 12 9 8 18 22 12 14 ...
.. ..- attr(*, "label")= chr "Numeric Result/Finding in Standard Units"
..$ SCSTRESU: chr [1:254] "YEARS" "YEARS" "YEARS" "YEARS" ...
.. ..- attr(*, "label")= chr "Standard Units"
..$ SCDTC : chr [1:254] "2013-12-26" "2012-07-22" "2013-07-11" "2014-03-10" ...
.. ..- attr(*, "label")= chr "Date/Time of Collection"
..$ SCDY : num [1:254] -7 -14 -8 -8 -7 -21 -9 -13 -7 -13 ...
.. ..- attr(*, "label")= chr "Study Day of Examination"
$ mh: tibble [1,817 × 19] (S3: tbl_df/tbl/data.frame)
..$ STUDYID : chr [1:1817] "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" ...
.. ..- attr(*, "label")= chr "Study Identifier"
..$ DOMAIN : chr [1:1817] "MH" "MH" "MH" "MH" ...
.. ..- attr(*, "label")= chr "Domain Abbreviation"
..$ USUBJID : chr [1:1817] "01-701-1015" "01-701-1015" "01-701-1015" "01-701-1015" ...
.. ..- attr(*, "label")= chr "Unique Subject Identifier"
..$ MHSEQ : num [1:1817] 9 10 4 2 5 8 1 11 6 3 ...
.. ..- attr(*, "label")= chr "Sequence Number"
..$ MHSPID : chr [1:1817] "" "" "E02" "E03" ...
.. ..- attr(*, "label")= chr "Sponsor-Defined Identifier"
..$ MHTERM : chr [1:1817] "ALZHEIMER'S DISEASE" "VERBATIM_0539" "VERBATIM_0841" "VERBATIM_0301" ...
.. ..- attr(*, "label")= chr "Reported Term for the Medical History"
..$ MHLLT : chr [1:1817] "" "GALLBLADDER STONES" "HEARTBURN" "HEADACHE" ...
.. ..- attr(*, "label")= chr "Lowest Level Term"
..$ MHDECOD : chr [1:1817] "" "CHOLELITHIASIS" "DYSPEPSIA" "HEADACHE" ...
.. ..- attr(*, "label")= chr "Dictionary-Derived Term"
..$ MHHLT : chr [1:1817] "" "HLT_0084" "HLT_0244" "HLT_0064" ...
.. ..- attr(*, "label")= chr "High Level Term"
..$ MHHLGT : chr [1:1817] "" "HLGT_0177" "HLGT_0716" "HLGT_0344" ...
.. ..- attr(*, "label")= chr "High Level Group Term"
..$ MHCAT : chr [1:1817] "PRIMARY DIAGNOSIS" "HISTORICAL DIAGNOSIS" "SIGNIFICANT PRE-EXISTING CONDITION" "SIGNIFICANT PRE-EXISTING CONDITION" ...
.. ..- attr(*, "label")= chr "Category for Medical History"
..$ MHBODSYS: chr [1:1817] "" "HEPATOBILIARY DISORDERS" "GASTROINTESTINAL DISORDERS" "NERVOUS SYSTEM DISORDERS" ...
.. ..- attr(*, "label")= chr "Body System or Organ Class"
..$ MHSEV : chr [1:1817] "" "" "MILD" "MILD" ...
.. ..- attr(*, "label")= chr "Severity/Intensity"
..$ VISITNUM: num [1:1817] 1 1 1 1 1 1 1 1 1 1 ...
.. ..- attr(*, "label")= chr "Visit Number"
..$ VISIT : chr [1:1817] "SCREENING 1" "SCREENING 1" "SCREENING 1" "SCREENING 1" ...
.. ..- attr(*, "label")= chr "Visit Name"
..$ VISITDY : num [1:1817] -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 ...
.. ..- attr(*, "label")= chr "Planned Study Day of Visit"
..$ MHDTC : chr [1:1817] "2013-12-26" "2013-12-26" "2013-12-26" "2013-12-26" ...
.. ..- attr(*, "label")= chr "Date/Time of History Collection"
..$ MHSTDTC : chr [1:1817] "2010-04-30" "2012" "" "" ...
.. ..- attr(*, "label")= chr "Start Date/Time of Medical History Event"
..$ MHDY : num [1:1817] -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 ...
.. ..- attr(*, "label")= chr "Study Day of History Collection"
$ ds: tibble [596 × 15] (S3: tbl_df/tbl/data.frame)
..$ STUDYID : chr [1:596] "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" ...
.. ..- attr(*, "label")= chr "Study Identifier"
.. ..- attr(*, "format.sas")= chr "$12"
..$ DOMAIN : chr [1:596] "DS" "DS" "DS" "DS" ...
.. ..- attr(*, "label")= chr "Domain Abbreviation"
.. ..- attr(*, "format.sas")= chr "$2"
..$ USUBJID : chr [1:596] "01-701-1015" "01-701-1015" "01-701-1023" "01-701-1023" ...
.. ..- attr(*, "label")= chr "Unique Subject Identifier"
.. ..- attr(*, "format.sas")= chr "$11"
..$ DSSEQ : num [1:596] 1 2 1 2 3 1 2 1 2 3 ...
.. ..- attr(*, "label")= chr "Sequence Number"
..$ DSSPID : chr [1:596] "" "" "24" "" ...
.. ..- attr(*, "label")= chr "Sponsor-Defined Identifier"
.. ..- attr(*, "format.sas")= chr "$2"
..$ DSTERM : chr [1:596] "PROTOCOL COMPLETED" "FINAL LAB VISIT" "ADVERSE EVENT" "FINAL LAB VISIT" ...
.. ..- attr(*, "label")= chr "Reported Term for the Disposition Event"
.. ..- attr(*, "format.sas")= chr "$63"
..$ DSDECOD : chr [1:596] "COMPLETED" "FINAL LAB VISIT" "ADVERSE EVENT" "FINAL LAB VISIT" ...
.. ..- attr(*, "label")= chr "Standardized Disposition Term"
.. ..- attr(*, "format.sas")= chr "$27"
..$ DSCAT : chr [1:596] "DISPOSITION EVENT" "OTHER EVENT" "DISPOSITION EVENT" "OTHER EVENT" ...
.. ..- attr(*, "label")= chr "Category for Disposition Event"
.. ..- attr(*, "format.sas")= chr "$17"
..$ VISITNUM: num [1:596] 13 13 5 5 201 13 13 5 5 201 ...
.. ..- attr(*, "label")= chr "Visit Number"
..$ VISIT : chr [1:596] "WEEK 26" "WEEK 26" "WEEK 4" "WEEK 4" ...
.. ..- attr(*, "label")= chr "Visit Name"
.. ..- attr(*, "format.sas")= chr "$17"
..$ EPOCH : chr [1:596] "FOLLOW-UP" "FOLLOW-UP" "TREATMENT" "TREATMENT" ...
.. ..- attr(*, "label")= chr "Epoch"
.. ..- attr(*, "format.sas")= chr "$9"
..$ DSDTC : chr [1:596] "2014-07-02" "2014-07-02T11:45" "2012-09-02" "2012-09-02T10:15" ...
.. ..- attr(*, "label")= chr "Date/Time of Collection"
.. ..- attr(*, "format.sas")= chr "$16"
..$ DSSTDTC : chr [1:596] "2014-07-02" "2014-07-02" "2012-09-02" "2012-09-02" ...
.. ..- attr(*, "label")= chr "Start Date/Time of Disposition Event"
.. ..- attr(*, "format.sas")= chr "$10"
..$ DSDY : num [1:596] 182 182 29 29 198 180 180 28 28 182 ...
.. ..- attr(*, "label")= chr "Study Day of Visit/Collection/Exam"
..$ DSSTDY : num [1:596] 182 182 29 29 198 180 180 28 28 182 ...
.. ..- attr(*, "label")= chr "Study Day of Start of Disposition Event"
$ sv: tibble [3,559 × 12] (S3: tbl_df/tbl/data.frame)
..$ STUDYID : chr [1:3559] "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" ...
.. ..- attr(*, "label")= chr "Study Identifier"
..$ DOMAIN : chr [1:3559] "SV" "SV" "SV" "SV" ...
.. ..- attr(*, "label")= chr "Domain Abbreviation"
..$ USUBJID : chr [1:3559] "01-701-1015" "01-701-1015" "01-701-1015" "01-701-1015" ...
.. ..- attr(*, "label")= chr "Unique Subject Identifier"
..$ VISITNUM: num [1:3559] 1 2 3 3.5 4 5 6 7 8 9 ...
.. ..- attr(*, "label")= chr "Visit Number"
..$ VISIT : chr [1:3559] "SCREENING 1" "SCREENING 2" "BASELINE" "AMBUL ECG PLACEMENT" ...
.. ..- attr(*, "label")= chr "Visit Name"
..$ VISITDY : num [1:3559] -7 -1 1 13 14 28 30 42 56 84 ...
.. ..- attr(*, "label")= chr "Planned Study Day of Visit"
..$ EPOCH : chr [1:3559] "SCREENING" "SCREENING" "TREATMENT" "TREATMENT" ...
.. ..- attr(*, "label")= chr "Epoch"
..$ SVSTDTC : chr [1:3559] "2013-12-26" "2013-12-31" "2014-01-02" "2014-01-14" ...
.. ..- attr(*, "label")= chr "Start Date/Time of Visit"
..$ SVENDTC : chr [1:3559] "2013-12-26" "2013-12-31" "2014-01-02" "2014-01-14" ...
.. ..- attr(*, "label")= chr "End Date/Time of Visit"
..$ SVSTDY : num [1:3559] -7 -2 1 13 15 29 31 42 63 84 ...
.. ..- attr(*, "label")= chr "Study Day of Start of Visit"
..$ SVENDY : num [1:3559] -7 -2 1 13 15 29 31 42 63 84 ...
.. ..- attr(*, "label")= chr "Study Day of End of Visit"
..$ SVUPDES : chr [1:3559] "" "" "" "" ...
.. ..- attr(*, "label")= chr "Description of Unplanned Visit"
$ qs: tibble [121,749 × 23] (S3: tbl_df/tbl/data.frame)
..$ STUDYID : chr [1:121749] "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" ...
..$ DOMAIN : chr [1:121749] "QS" "QS" "QS" "QS" ...
..$ USUBJID : chr [1:121749] "01-701-1015" "01-701-1015" "01-701-1015" "01-701-1015" ...
..$ QSSEQ : num [1:121749] 5001 5016 5031 5046 5002 ...
..$ QSTESTCD: chr [1:121749] "ACITM01" "ACITM01" "ACITM01" "ACITM01" ...
..$ QSTEST : chr [1:121749] "WORD RECALL TASK" "WORD RECALL TASK" "WORD RECALL TASK" "WORD RECALL TASK" ...
..$ QSCAT : chr [1:121749] "ADAS-COG" "ADAS-COG" "ADAS-COG" "ADAS-COG" ...
..$ QSSCAT : chr [1:121749] "" "" "" "" ...
..$ QSORRES : chr [1:121749] "3" "2" "4" "3" ...
..$ QSORRESU: chr [1:121749] "" "" "" "" ...
..$ QSSTRESC: chr [1:121749] "3" "2" "4" "3" ...
..$ QSSTRESN: num [1:121749] 3 2 4 3 1 0 0 0 3 3 ...
..$ QSSTRESU: chr [1:121749] "" "" "" "" ...
..$ QSSTAT : chr [1:121749] "" "" "" "" ...
..$ QSREASND: chr [1:121749] "" "" "" "" ...
..$ QSBLFL : chr [1:121749] "Y" "" "" "" ...
..$ QSDRVFL : chr [1:121749] "" "" "" "" ...
..$ VISITNUM: num [1:121749] 3 8 10 12 3 8 10 12 3 8 ...
..$ VISIT : chr [1:121749] "BASELINE" "WEEK 8" "WEEK 16" "WEEK 24" ...
..$ VISITDY : num [1:121749] 1 56 112 168 1 56 112 168 1 56 ...
..$ EPOCH : chr [1:121749] "TREATMENT" "TREATMENT" "TREATMENT" "TREATMENT" ...
..$ QSDTC : chr [1:121749] "2014-01-02" "2014-03-05" "2014-05-07" "2014-06-18" ...
..$ QSDY : num [1:121749] 1 63 126 168 1 63 126 168 1 63 ...
# -----------------------------------------------
# Section 1: Process Demographic Data (src_dm)
# -----------------------------------------------
# Replicates SAS logic: cleans variables, recodes SITEID, treatment arms,
# categorizes AGE and assigns race codes, sets ITT flag, and converts RFENDTC.
src_dm <- sdtm_data$dm %>%
rename(`__origageu` = AGEU,
`__origrace` = RACE,
`__origethnic` = ETHNIC) %>%
filter(ARMCD != "Scrnfail") %>%
mutate(
AGEU = str_trim(`__origageu`),
RACE = str_trim(`__origrace`),
ETHNIC = str_trim(`__origethnic`),
# Recode SITEID: if numeric SITEID is in the given set, assign "900"
SITEGR1 = if_else(as.numeric(SITEID) %in% c(702, 706, 707, 711, 714, 715, 717),
"900", SITEID),
TRT01P = ARM,
# Derive numeric treatment code based on ARM content
TRT01PN = case_when(
str_starts(ARM, "Placebo") ~ 0,
str_detect(ARM, regex("Low", ignore_case = TRUE)) ~ 54,
str_detect(ARM, regex("High", ignore_case = TRUE)) ~ 81,
TRUE ~ NA_integer_
),
# Categorize AGE into groups and assign numeric codes
AGEGR1 = case_when(
AGE > 0 & AGE < 65 ~ "<65",
AGE >= 65 & AGE <= 80 ~ "65-80",
AGE > 80 ~ ">80",
TRUE ~ NA_character_
),
AGEGR1N = case_when(
AGEGR1 == "<65" ~ 1,
AGEGR1 == "65-80" ~ 2,
AGEGR1 == ">80" ~ 3,
TRUE ~ NA_integer_
),
# Assign race code based on first two letters of RACE
RACEN = case_when(
!is.na(RACE) & str_sub(RACE, 1, 2) == "WH" ~ 1,
!is.na(RACE) & str_sub(RACE, 1, 2) == "BL" ~ 2,
!is.na(RACE) & str_sub(RACE, 1, 2) %in% c("AM", "AS") ~ 3,
TRUE ~ NA_integer_
),
ITTFL = if_else(!is.na(ARMCD), "Y", "N"),
# Convert RFENDTC to a Date (assumes ISO8601 format)
RFENDT = if_else(!is.na(RFENDTC), ymd(RFENDTC), as.Date(NA))
)
# -----------------------------------------------
# Section 2: Process Disposition Data (src_ds)
# -----------------------------------------------
# For each subject, if DSCAT equals "DISPOSITION EVENT", this section:
# - Sets a visit number (VISNUMEN) with special handling if VISITNUM is 13
# - Copies DSDECOD to DCDECOD and derives DCREASCD based on DSDECOD/DSTERM.
# - Sets flags DISCONFL and DSRAEFL based on DCDECOD.
src_ds <- sdtm_data$ds %>%
group_by(USUBJID) %>%
mutate(
VISNUMEN = if_else(DSCAT == "DISPOSITION EVENT",
if_else(VISITNUM != 13, VISITNUM, 12),
NA_integer_),
DCDECOD = if_else(DSCAT == "DISPOSITION EVENT", DSDECOD, NA_character_),
DCREASCD = case_when(
DSCAT == "DISPOSITION EVENT" &
!str_detect(DSDECOD, regex("^(STUDY|WITH|SCRE|LOST)", ignore_case = TRUE)) ~
str_replace_all(str_to_title(DSDECOD), " Of ", " of "),
DSCAT == "DISPOSITION EVENT" & str_starts(DSDECOD, regex("STUDY", ignore_case = TRUE)) ~ "Sponsor Decision",
DSCAT == "DISPOSITION EVENT" & str_starts(DSDECOD, regex("WITH", ignore_case = TRUE)) ~ "Withdrew Consent",
DSCAT == "DISPOSITION EVENT" & str_starts(DSDECOD, regex("SCRE", ignore_case = TRUE)) ~ "I/E Not Met",
DSCAT == "DISPOSITION EVENT" & str_starts(DSDECOD, regex("LOST", ignore_case = TRUE)) ~ "Lost to Follow-up",
TRUE ~ NA_character_
),
DCREASCD = if_else(DSCAT == "DISPOSITION EVENT" & DSTERM == "PROTOCOL ENTRY CRITERIA NOT MET",
"I/E Not Met", DCREASCD)
) %>%
filter(row_number() == n()) %>% # Keep only the last record per subject
ungroup() %>%
mutate(
DISCONFL = if_else(DCDECOD != "COMPLETED", "Y", NA_character_),
DSRAEFL = if_else(DCDECOD == "ADVERSE EVENT", "Y", NA_character_)
) %>%
select(USUBJID, VISNUMEN, starts_with("DC"), DISCONFL, DSRAEFL)
# -----------------------------------------------
# Section 3: Process Baseline Vitals Data (src_vs)
# -----------------------------------------------
# Filters for HEIGHT at visit 1 and WEIGHT at visit 3, then pivots to wide format.
src_vs <- sdtm_data$vs %>%
filter((VSTESTCD == "HEIGHT" & VISITNUM == 1) |
(VSTESTCD == "WEIGHT" & VISITNUM == 3)) %>%
select(USUBJID, VSTESTCD, VSSTRESN) %>%
pivot_wider(names_from = VSTESTCD, values_from = VSSTRESN) %>%
rename(HEIGHTBL = HEIGHT,
WEIGHTBL = WEIGHT)
# -----------------------------------------------
# Section 4: Process Treatment Start and Subject Visit Data (src_sv)
# -----------------------------------------------
# Extracts key dates from the SV dataset. For each subject, it creates:
# - VISIT1DT from visit 1,
# - TRTSDT from visit 3,
# - Additional visit date variables for visits 4, 8, 10, and 12.
src_sv <- sdtm_data$sv %>%
arrange(USUBJID, VISITNUM) %>%
group_by(USUBJID) %>%
mutate(
VISIT1DT = if_else(VISITNUM == 1, ymd(SVSTDTC), as.Date(NA)),
TRTSDT = if_else(VISITNUM == 3, ymd(SVSTDTC), as.Date(NA)),
`__vis4dt` = if_else(VISITNUM == 4, ymd(SVSTDTC), as.Date(NA)),
`__vis8dt` = if_else(VISITNUM == 8, ymd(SVSTDTC), as.Date(NA)),
`__vis10dt` = if_else(VISITNUM == 10, ymd(SVSTDTC), as.Date(NA)),
`__vis12dt` = if_else(VISITNUM == 12, ymd(SVSTDTC), as.Date(NA))
) %>%
summarise(
VISIT1DT = last(na.omit(VISIT1DT)),
TRTSDT = last(na.omit(TRTSDT)),
`__vis4dt` = last(na.omit(`__vis4dt`)),
`__vis8dt` = last(na.omit(`__vis8dt`)),
`__vis10dt` = last(na.omit(`__vis10dt`)),
`__vis12dt` = last(na.omit(`__vis12dt`))
) %>%
ungroup()
# -----------------------------------------------
# Section 5: Process Primary Diagnosis Data (src_mh)
# -----------------------------------------------
# Filters the MH domain for records with MHCAT "PRIMARY DIAGNOSIS" and converts dates.
src_mh <- sdtm_data$mh %>%
filter(MHCAT == "PRIMARY DIAGNOSIS") %>%
mutate(
DISONSDT = if_else(!is.na(MHSTDTC), ymd(MHSTDTC), as.Date(NA))
) %>%
select(USUBJID, DISONSDT)
# -----------------------------------------------
# Section 6: Process Questionnaire Data (src_qs)
# -----------------------------------------------
# This section aggregates questionnaire scores and flags per subject.
# It calculates:
# - MMSETOT: the sum of QSORRES (converted to numeric) for records where QSCAT starts with "MINI"
# - __effalz: a flag (1/0) if any record with QSCAT starting with "ALZ" and VISITNUM > 3 exists
# - __effcli: similarly, a flag for "CLI" and VISITNUM > 3.
src_qs <- sdtm_data$qs %>%
group_by(USUBJID) %>%
summarise(
MMSETOT = sum(
if_else(
str_starts(QSCAT, "MINI"),
# Suppress warnings when coercing non-numeric values to numeric
suppressWarnings(as.numeric(QSORRES)),
0
),
na.rm = TRUE
),
`__effalz` = if_else(any(str_starts(QSCAT, "ALZ") & VISITNUM > 3), 1, 0),
`__effcli` = if_else(any(str_starts(QSCAT, "CLI") & VISITNUM > 3), 1, 0)
) %>%
ungroup()
# -----------------------------------------------
# Section 7: Process Exposure Data (src_ex)
# -----------------------------------------------
# Converts EX domain dates, formats VISITNUM as a two-digit string,
# pivots the data for exposure start, end, and dose, and then derives TRTEDT.
ex <- sdtm_data$ex %>%
mutate(
exstdt = ymd(EXSTDTC),
exendt = ymd(EXENDTC),
`__visc` = sprintf("%02d", VISITNUM)
)
# Helper function to pivot exposure variables by USUBJID.
# It uses names_glue to create column names of the form "EX<__visc><suff>"
ex_transpose <- function(data, var, suff) {
# Construct the names_glue template using the provided suffix.
# For example, if suff = "ST", columns will be "EX01ST", "EX02ST", etc.
name_template <- paste0("EX{`__visc`}", suff)
data %>%
select(USUBJID, `__visc`, !!sym(var)) %>%
pivot_wider(
names_from = `__visc`,
values_from = !!sym(var),
names_glue = name_template
)
}
# Transpose exposure start dates, end dates, and dose.
ex_st <- ex_transpose(ex, var = "exstdt", suff = "ST")
ex_en <- ex_transpose(ex, var = "exendt", suff = "EN")
ex_ds <- ex_transpose(ex, var = "EXDOSE", suff = "DS")
# Merge the transposed exposure datasets by USUBJID and derive treatment end date.
src_ex <- ex_st %>%
left_join(ex_en, by = "USUBJID") %>%
left_join(ex_ds, by = "USUBJID") %>%
mutate(
TRTEDT = case_when(
!is.na(`EX12ST`) ~ `EX12EN`,
!is.na(`EX04ST`) ~ `EX04EN`,
!is.na(`EX03ST`) ~ `EX03EN`,
TRUE ~ as.Date(NA)
)
)
# -----------------------------------------------
# Final Output Examination
# -----------------------------------------------
# Print the structure of each processed domain for review
cat("Structure of Demographics (src_dm):\n")Structure of Demographics (src_dm):
str(src_dm)tibble [254 × 36] (S3: tbl_df/tbl/data.frame)
$ STUDYID : chr [1:254] "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" ...
..- attr(*, "label")= chr "Study Identifier"
$ DOMAIN : chr [1:254] "DM" "DM" "DM" "DM" ...
..- attr(*, "label")= chr "Domain Abbreviation"
$ USUBJID : chr [1:254] "01-701-1015" "01-701-1023" "01-701-1028" "01-701-1033" ...
..- attr(*, "label")= chr "Unique Subject Identifier"
$ SUBJID : chr [1:254] "1015" "1023" "1028" "1033" ...
..- attr(*, "label")= chr "Subject Identifier for the Study"
$ RFSTDTC : chr [1:254] "2014-01-02" "2012-08-05" "2013-07-19" "2014-03-18" ...
..- attr(*, "label")= chr "Subject Reference Start Date/Time"
$ RFENDTC : chr [1:254] "2014-07-02" "2012-09-02" "2014-01-14" "2014-04-14" ...
..- attr(*, "label")= chr "Subject Reference End Date/Time"
$ RFXSTDTC : chr [1:254] "2014-01-02" "2012-08-05" "2013-07-19" "2014-03-18" ...
..- attr(*, "label")= chr "Date/Time of First Study Treatment"
$ RFXENDTC : chr [1:254] "2014-07-02" "2012-09-01" "2014-01-14" "2014-03-31" ...
..- attr(*, "label")= chr "Date/Time of Last Study Treatment"
$ RFICDTC : chr [1:254] "" "" "" "" ...
..- attr(*, "label")= chr "Date/Time of Informed Consent"
$ RFPENDTC : chr [1:254] "2014-07-02T11:45" "2013-02-18" "2014-01-14T11:10" "2014-09-15" ...
..- attr(*, "label")= chr "Date/Time of End of Participation"
$ DTHDTC : chr [1:254] "" "" "" "" ...
..- attr(*, "label")= chr "Date/Time of Death"
$ DTHFL : chr [1:254] "" "" "" "" ...
..- attr(*, "label")= chr "Subject Death Flag"
$ SITEID : chr [1:254] "701" "701" "701" "701" ...
..- attr(*, "label")= chr "Study Site Identifier"
$ AGE : num [1:254] 63 64 71 74 77 85 68 81 84 52 ...
..- attr(*, "label")= chr "Age"
$ __origageu : chr [1:254] "YEARS" "YEARS" "YEARS" "YEARS" ...
..- attr(*, "label")= chr "Age Units"
$ SEX : chr [1:254] "F" "M" "M" "M" ...
..- attr(*, "label")= chr "Sex"
$ __origrace : chr [1:254] "WHITE" "WHITE" "WHITE" "WHITE" ...
..- attr(*, "label")= chr "Race"
$ __origethnic: chr [1:254] "HISPANIC OR LATINO" "HISPANIC OR LATINO" "NOT HISPANIC OR LATINO" "NOT HISPANIC OR LATINO" ...
..- attr(*, "label")= chr "Ethnicity"
$ ARMCD : chr [1:254] "Pbo" "Pbo" "Xan_Hi" "Xan_Lo" ...
..- attr(*, "label")= chr "Planned Arm Code"
$ ARM : chr [1:254] "Placebo" "Placebo" "Xanomeline High Dose" "Xanomeline Low Dose" ...
..- attr(*, "label")= chr "Description of Planned Arm"
$ ACTARMCD : chr [1:254] "Pbo" "Pbo" "Xan_Hi" "Xan_Lo" ...
..- attr(*, "label")= chr "Actual Arm Code"
$ ACTARM : chr [1:254] "Placebo" "Placebo" "Xanomeline High Dose" "Xanomeline Low Dose" ...
..- attr(*, "label")= chr "Description of Actual Arm"
$ COUNTRY : chr [1:254] "USA" "USA" "USA" "USA" ...
..- attr(*, "label")= chr "Country"
$ DMDTC : chr [1:254] "2013-12-26" "2012-07-22" "2013-07-11" "2014-03-10" ...
..- attr(*, "label")= chr "Date/Time of Collection"
$ DMDY : num [1:254] -7 -14 -8 -8 -7 -21 -9 -13 -7 -13 ...
..- attr(*, "label")= chr "Study Day of Collection"
$ AGEU : chr [1:254] "YEARS" "YEARS" "YEARS" "YEARS" ...
$ RACE : chr [1:254] "WHITE" "WHITE" "WHITE" "WHITE" ...
$ ETHNIC : chr [1:254] "HISPANIC OR LATINO" "HISPANIC OR LATINO" "NOT HISPANIC OR LATINO" "NOT HISPANIC OR LATINO" ...
$ SITEGR1 : chr [1:254] "701" "701" "701" "701" ...
$ TRT01P : chr [1:254] "Placebo" "Placebo" "Xanomeline High Dose" "Xanomeline Low Dose" ...
..- attr(*, "label")= chr "Description of Planned Arm"
$ TRT01PN : num [1:254] 0 0 81 54 81 0 54 54 54 0 ...
$ AGEGR1 : chr [1:254] "<65" "<65" "65-80" "65-80" ...
$ AGEGR1N : num [1:254] 1 1 2 2 2 3 2 3 3 1 ...
$ RACEN : num [1:254] 1 1 1 1 1 1 1 1 1 1 ...
$ ITTFL : chr [1:254] "Y" "Y" "Y" "Y" ...
$ RFENDT : Date[1:254], format: "2014-07-02" "2012-09-02" ...
cat("\n-----------------------------------------------\n")
-----------------------------------------------
cat("Structure of Disposition Data (src_ds):\n")Structure of Disposition Data (src_ds):
str(src_ds)tibble [306 × 6] (S3: tbl_df/tbl/data.frame)
$ USUBJID : chr [1:306] "01-701-1015" "01-701-1023" "01-701-1028" "01-701-1033" ...
..- attr(*, "label")= chr "Unique Subject Identifier"
..- attr(*, "format.sas")= chr "$11"
$ VISNUMEN: num [1:306] NA NA NA NA NA NA 1 NA NA NA ...
$ DCDECOD : chr [1:306] NA NA NA NA ...
$ DCREASCD: chr [1:306] NA NA NA NA ...
$ DISCONFL: chr [1:306] NA NA NA NA ...
$ DSRAEFL : chr [1:306] NA NA NA NA ...
cat("\n-----------------------------------------------\n")
-----------------------------------------------
cat("Structure of Baseline Vitals (src_vs):\n")Structure of Baseline Vitals (src_vs):
str(src_vs)tibble [254 × 3] (S3: tbl_df/tbl/data.frame)
$ USUBJID : chr [1:254] "01-701-1015" "01-701-1023" "01-701-1028" "01-701-1033" ...
..- attr(*, "label")= chr "Unique Subject Identifier"
$ HEIGHTBL: num [1:254] 147 163 178 175 155 ...
..- attr(*, "label")= chr "Numeric Result/Finding in Standard Units"
$ WEIGHTBL: num [1:254] 54.4 80.3 99.3 88.5 62.6 ...
..- attr(*, "label")= chr "Numeric Result/Finding in Standard Units"
cat("\n-----------------------------------------------\n")
-----------------------------------------------
cat("Structure of Treatment Start & Subject Visit (src_sv):\n")Structure of Treatment Start & Subject Visit (src_sv):
str(src_sv)tibble [306 × 7] (S3: tbl_df/tbl/data.frame)
$ USUBJID : chr [1:306] "01-701-1015" "01-701-1023" "01-701-1028" "01-701-1033" ...
..- attr(*, "label")= chr "Unique Subject Identifier"
$ VISIT1DT : Date[1:306], format: "2013-12-26" "2012-07-22" ...
$ TRTSDT : Date[1:306], format: "2014-01-02" "2012-08-05" ...
$ __vis4dt : Date[1:306], format: "2014-01-16" "2012-08-27" ...
$ __vis8dt : Date[1:306], format: "2014-03-05" NA ...
$ __vis10dt: Date[1:306], format: "2014-05-07" NA ...
$ __vis12dt: Date[1:306], format: "2014-06-18" NA ...
cat("\n-----------------------------------------------\n")
-----------------------------------------------
cat("Structure of Primary Diagnosis (src_mh):\n")Structure of Primary Diagnosis (src_mh):
str(src_mh)tibble [254 × 2] (S3: tbl_df/tbl/data.frame)
$ USUBJID : chr [1:254] "01-701-1015" "01-701-1023" "01-701-1028" "01-701-1033" ...
..- attr(*, "label")= chr "Unique Subject Identifier"
$ DISONSDT: Date[1:254], format: "2010-04-30" "2006-03-11" ...
cat("\n-----------------------------------------------\n")
-----------------------------------------------
cat("Structure of Questionnaire Data (src_qs):\n")Structure of Questionnaire Data (src_qs):
str(src_qs)tibble [254 × 4] (S3: tbl_df/tbl/data.frame)
$ USUBJID : chr [1:254] "01-701-1015" "01-701-1023" "01-701-1028" "01-701-1033" ...
$ MMSETOT : num [1:254] 0 0 0 0 0 0 0 0 0 0 ...
$ __effalz: num [1:254] 0 0 0 0 0 0 0 0 0 0 ...
$ __effcli: num [1:254] 0 0 0 0 0 0 0 0 0 0 ...
cat("\n-----------------------------------------------\n")
-----------------------------------------------
cat("Structure of Exposure Data (src_ex):\n")Structure of Exposure Data (src_ex):
str(src_ex)tibble [254 × 11] (S3: tbl_df/tbl/data.frame)
$ USUBJID: chr [1:254] "01-701-1015" "01-701-1023" "01-701-1028" "01-701-1033" ...
..- attr(*, "label")= chr "Unique Subject Identifier"
..- attr(*, "format.sas")= chr "$11"
$ EX03ST : Date[1:254], format: "2014-01-02" "2012-08-05" ...
$ EX04ST : Date[1:254], format: "2014-01-17" "2012-08-28" ...
$ EX12ST : Date[1:254], format: "2014-06-19" NA ...
$ EX03EN : Date[1:254], format: "2014-01-16" "2012-08-27" ...
$ EX04EN : Date[1:254], format: "2014-06-18" "2012-09-01" ...
$ EX12EN : Date[1:254], format: "2014-07-02" NA ...
$ EX03DS : num [1:254] 0 0 54 54 54 0 54 54 54 0 ...
..- attr(*, "label")= chr "Dose"
$ EX04DS : num [1:254] 0 0 81 NA 81 0 54 NA 54 0 ...
..- attr(*, "label")= chr "Dose"
$ EX12DS : num [1:254] 0 NA 54 NA 54 NA 54 NA NA 0 ...
..- attr(*, "label")= chr "Dose"
$ TRTEDT : Date[1:254], format: "2014-07-02" "2012-09-01" ...
cat("\n-----------------------------------------------\n")
-----------------------------------------------
Data Combination & Variable Creation
/*********************************************************************************/
/*** BEGIN SECTION TO COMBINE ALL THE SOURCE DATA AND CREATE REST OF VARIABLES ***/
/*********************************************************************************/
data adsl;
merge src_:
SDTM.SC (keep = USUBJID SCSTRESN SCTESTCD
where = (SCTESTCD = 'EDLEVEL')
rename = (SCSTRESN = EDUCLVL));
by USUBJID;
length SAFFL EFFFL $1 BMIBLGR1 $6 DURDSGR1 $4;
if not missing(STUDYID); /* STUDYID is only in src_dm */
TRT01A = TRT01P;
TRT01AN = TRT01PN;
/* set population flags */
SAFFL = ifc(not missing(TRTSDT), 'Y', 'N');
EFFFL = ifc(__effalz = 1 and __effcli = 1, 'Y', 'N');
/* CDISC has weight and height rounded to one decimal */
if not missing(HEIGHTBL) then HEIGHTBL = round(HEIGHTBL, .1);
if not missing(WEIGHTBL) then WEIGHTBL = round(WEIGHTBL, .1);
if nmiss(HEIGHTBL, WEIGHTBL) = 0 then do;
BMIBL = round(WEIGHTBL / ((HEIGHTBL / 100)**2), .1);
if . < BMIBL < 25 then BMIBLGR1 = '<25';
else if 25 <= BMIBL < 30 then BMIBLGR1 = '25-<30';
else if BMIBL >= 30 then BMIBLGR1= '>=30';
end;
/* determine the number of months between diagnosis and visit 1 */
DURDIS = round((VISIT1DT - DISONSDT + 1) / (365.25/12), .1);
if not missing(DURDIS) and DURDIS < 12 then DURDSGR1 = '<12';
else if DURDIS >= 12 then DURDSGR1 = '>=12';
if nmiss(__vis8dt, RFENDT) = 0 and RFENDT >= __vis8dt then COMP8FL = 'Y';
else COMP8FL = 'N';
if nmiss(__vis10dt, RFENDT) = 0 and RFENDT >= __vis10dt then COMP16FL = 'Y';
else COMP16FL = 'N';
if nmiss(__vis12dt, RFENDT) = 0 and RFENDT >= __vis12dt then COMP24FL = 'Y';
else COMP24FL = 'N';
/* if missing treatment end date and subject discontinued after visit 3 then set end of treatment to discontinuation */
if missing(TRTEDT) and nmiss(RFENDT, TRTSDT) = 0 and RFENDT > __vis3dt then TRTEDT = RFENDT;
if nmiss(TRTSDT, TRTEDT) = 0 then TRTDUR = TRTEDT - TRTSDT + 1;
/* calculate cumulative dose */
if TRT01AN in (0 54) then CUMDOSE = TRTDUR * TRT01AN;
else if TRT01AN = 81 then do;
/* dosing interval 1 on 54 mg */
if nmiss(__vis4dt, TRTSDT) = 0 then _doseint1 = min(TRTEDT, __vis4dt) - TRTSDT + 1;
else if missing(__vis4dt) and nmiss(TRTSDT, RFENDT) = 0 and RFENDT > TRTSDT then _doseint1 = TRTEDT - TRTSDT + 1;
if not missing(_doseint1) then ds_doseint1 = _doseint1 * 54;
/* dosing interval 2 on 81 mg */
if nmiss(__vis4dt, __vis12dt) = 0 then _doseint2 = min(TRTEDT, __vis12dt) - __vis4dt;
else if missing(__vis12dt) and nmiss(__vis4dt, RFENDT) = 0 and RFENDT > __vis4dt then _doseint2 = TRTEDT - __vis4dt;
if not missing(_doseint2) then ds_doseint2 = _doseint2 * 81;
/* dosing interval 3 on 54 mg */
if nmiss(__vis12dt, RFENDT) = 0 and RFENDT > __vis12dt then _doseint3 = TRTEDT - __vis12dt;
if not missing(_doseint3) then ds_doseint3 = _doseint3 * 54;
CUMDOSE = sum(of ds_doseint:);
end;
if nmiss(TRTDUR, CUMDOSE) = 0 then AVGDD = round(CUMDOSE / TRTDUR, .1);
run;
/*******************************************************************************/
/*** END SECTION TO COMBINE ALL THE SOURCE DATA AND CREATE REST OF VARIABLES ***/
/*******************************************************************************/1 /*********************************************************************************/
2 /*** BEGIN SECTION TO COMBINE ALL THE SOURCE DATA AND CREATE REST OF VARIABLES ***/
3 /*********************************************************************************/
4 data adsl;
5 merge src_:
6 SDTM.SC (keep = USUBJID SCSTRESN SCTESTCD
7 where = (SCTESTCD = 'EDLEVEL')
8 rename = (SCSTRESN = EDUCLVL));
9 by USUBJID;
10 length SAFFL EFFFL $1 BMIBLGR1 $6 DURDSGR1 $4;
11 if not missing(STUDYID); /* STUDYID is only in src_dm */
12
13 TRT01A = TRT01P;
14 TRT01AN = TRT01PN;
15
16 /* set population flags */
17 SAFFL = ifc(not missing(TRTSDT), 'Y', 'N');
18 EFFFL = ifc(__effalz = 1 and __effcli = 1, 'Y', 'N');
19
20 /* CDISC has weight and height rounded to one decimal */
21 if not missing(HEIGHTBL) then HEIGHTBL = round(HEIGHTBL, .1);
22 if not missing(WEIGHTBL) then WEIGHTBL = round(WEIGHTBL, .1);
23 if nmiss(HEIGHTBL, WEIGHTBL) = 0 then do;
24 BMIBL = round(WEIGHTBL / ((HEIGHTBL / 100)**2), .1);
25 if . < BMIBL < 25 then BMIBLGR1 = '<25';
26 else if 25 <= BMIBL < 30 then BMIBLGR1 = '25-<30';
27 else if BMIBL >= 30 then BMIBLGR1= '>=30';
28 end;
2 The SAS System 20:17 Monday, March 3, 2025
29
30 /* determine the number of months between diagnosis and visit 1 */
31 DURDIS = round((VISIT1DT - DISONSDT + 1) / (365.25/12), .1);
32 if not missing(DURDIS) and DURDIS < 12 then DURDSGR1 = '<12';
33 else if DURDIS >= 12 then DURDSGR1 = '>=12';
34
35 if nmiss(__vis8dt, RFENDT) = 0 and RFENDT >= __vis8dt then COMP8FL = 'Y';
36 else COMP8FL = 'N';
37 if nmiss(__vis10dt, RFENDT) = 0 and RFENDT >= __vis10dt then COMP16FL = 'Y';
38 else COMP16FL = 'N';
39 if nmiss(__vis12dt, RFENDT) = 0 and RFENDT >= __vis12dt then COMP24FL = 'Y';
40 else COMP24FL = 'N';
41
42 /* if missing treatment end date and subject discontinued after visit 3 then set end of treatment to discontinuation
42 ! */
43 if missing(TRTEDT) and nmiss(RFENDT, TRTSDT) = 0 and RFENDT >= TRTSDT then TRTEDT = RFENDT;
44
45 if nmiss(TRTSDT, TRTEDT) = 0 then TRTDUR = TRTEDT - TRTSDT + 1;
46
47 /* calculate cumulative dose */
48 if TRT01AN in (0 54) then CUMDOSE = TRTDUR * TRT01AN;
49 else if TRT01AN = 81 then do;
50 /* dosing interval 1 on 54 mg */
51 if nmiss(__vis4dt, TRTSDT) = 0 then _doseint1 = min(TRTEDT, __vis4dt) - TRTSDT + 1;
52 else if missing(__vis4dt) and nmiss(TRTSDT, RFENDT) = 0 and RFENDT > TRTSDT then _doseint1 = TRTEDT - TRTSDT + 1;
53 if not missing(_doseint1) then ds_doseint1 = _doseint1 * 54;
54
55 /* dosing interval 2 on 81 mg */
56 if nmiss(__vis4dt, __vis12dt) = 0 then _doseint2 = min(TRTEDT, __vis12dt) - __vis4dt;
57 else if missing(__vis12dt) and nmiss(__vis4dt, RFENDT) = 0 and RFENDT > __vis4dt then _doseint2 = TRTEDT - __vis4dt
57 ! ;
58 if not missing(_doseint2) then ds_doseint2 = _doseint2 * 81;
59
60 /* dosing interval 3 on 54 mg */
61 if nmiss(__vis12dt, RFENDT) = 0 and RFENDT > __vis12dt then _doseint3 = TRTEDT - __vis12dt;
62 if not missing(_doseint3) then ds_doseint3 = _doseint3 * 54;
63
64 CUMDOSE = sum(of ds_doseint:);
65 end;
66
67 if nmiss(TRTDUR, CUMDOSE) = 0 then AVGDD = round(CUMDOSE / TRTDUR, .1);
68 run;
NOTE: There were 254 observations read from the data set WORK.SRC_DM.
NOTE: There were 306 observations read from the data set WORK.SRC_DS.
NOTE: There were 254 observations read from the data set WORK.SRC_EX.
NOTE: There were 254 observations read from the data set WORK.SRC_MH.
NOTE: There were 254 observations read from the data set WORK.SRC_QS.
NOTE: There were 306 observations read from the data set WORK.SRC_SV.
NOTE: There were 254 observations read from the data set WORK.SRC_VS.
NOTE: There were 254 observations read from the data set SDTM.SC.
WHERE SCTESTCD='EDLEVEL';
NOTE: The data set WORK.ADSL has 254 observations and 82 variables.
NOTE: DATA statement used (Total process time):
real time 0.11 seconds
cpu time 0.09 seconds
3 The SAS System 20:17 Monday, March 3, 2025
69 /*******************************************************************************/
70 /*** END SECTION TO COMBINE ALL THE SOURCE DATA AND CREATE REST OF VARIABLES ***/
71 /*******************************************************************************/# -----------------------------------------------
# Section 8: Combine All Source Data and Create Additional Variables (adsl)
# -----------------------------------------------
# Create a filtered SC dataset (only EDLEVEL) and rename SCSTRESN to EDUCLVL
sc_edulevel <- sdtm_data$sc %>%
filter(SCTESTCD == "EDLEVEL") %>%
select(USUBJID, EDUCLVL = SCSTRESN)
# Merge all processed source datasets by USUBJID.
# The merge order mirrors SAS's "merge src_:" plus the SC dataset.
adsl <- src_dm %>%
left_join(src_ds, by = "USUBJID") %>%
left_join(src_vs, by = "USUBJID") %>%
left_join(src_sv, by = "USUBJID") %>%
left_join(src_mh, by = "USUBJID") %>%
left_join(src_qs, by = "USUBJID") %>%
left_join(src_ex, by = "USUBJID") %>%
left_join(sc_edulevel, by = "USUBJID") %>%
# Retain only subjects with STUDYID (present in src_dm)
filter(!is.na(STUDYID)) %>%
# Create new variables based on SAS logic
mutate(
TRT01A = TRT01P,
TRT01AN = TRT01PN,
# Population flags:
SAFFL = if_else(!is.na(TRTSDT), "Y", "N"),
EFFFL = if_else(`__effalz` == 1 & `__effcli` == 1, "Y", "N"),
# Round baseline height and weight to one decimal
HEIGHTBL = round(HEIGHTBL, 1),
WEIGHTBL = round(WEIGHTBL, 1),
# Calculate baseline BMI if both height and weight are available
BMIBL = if_else(!is.na(HEIGHTBL) & !is.na(WEIGHTBL),
round(WEIGHTBL / ((HEIGHTBL/100)^2), 1),
as.numeric(NA)),
BMIBLGR1 = case_when(
!is.na(BMIBL) & BMIBL < 25 ~ "<25",
!is.na(BMIBL) & BMIBL >= 25 & BMIBL < 30 ~ "25-<30",
!is.na(BMIBL) & BMIBL >= 30 ~ ">=30",
TRUE ~ NA_character_
),
# Calculate duration (in months) between diagnosis (DISONSDT) and visit 1 (VISIT1DT)
DURDIS = if_else(!is.na(VISIT1DT) & !is.na(DISONSDT),
round((as.numeric(VISIT1DT - DISONSDT) + 1) / (365.25/12), 1),
as.numeric(NA)),
DURDSGR1 = case_when(
!is.na(DURDIS) & DURDIS < 12 ~ "<12",
!is.na(DURDIS) & DURDIS >= 12 ~ ">=12",
TRUE ~ NA_character_
),
# Comparison flags: if RFENDT is on or after the corresponding visit date, flag "Y"
COMP8FL = if_else(!is.na(`__vis8dt`) & !is.na(RFENDT) & (RFENDT >= `__vis8dt`), "Y", "N"),
COMP16FL = if_else(!is.na(`__vis10dt`) & !is.na(RFENDT) & (RFENDT >= `__vis10dt`), "Y", "N"),
COMP24FL = if_else(!is.na(`__vis12dt`) & !is.na(RFENDT) & (RFENDT >= `__vis12dt`), "Y", "N"),
# If treatment end date is missing and the subject discontinued after visit 3,
# then set TRTEDT equal to RFENDT.
# Here we use TRTSDT (visit 3 date) as a proxy for __vis3dt.
TRTEDT = if_else(is.na(TRTEDT) & !is.na(RFENDT) & !is.na(TRTSDT) & (RFENDT > TRTSDT),
RFENDT, TRTEDT),
# Calculate treatment duration (in days): TRTEDT - TRTSDT + 1
TRTDUR = if_else(!is.na(TRTSDT) & !is.na(TRTEDT),
as.numeric(TRTEDT - TRTSDT) + 1, as.numeric(NA))
)
calculate_cumdose <- function(TRT01AN, TRTDUR, TRTSDT, TRTEDT, RFENDT, vis4, vis12) {
if (!is.na(TRT01AN) && TRT01AN %in% c(0, 54)) {
return(TRTDUR * TRT01AN)
} else if (!is.na(TRT01AN) && TRT01AN == 81) {
# Dosing Interval 1 on 54 mg:
doseint1 <- if (!is.na(vis4) && !is.na(TRTSDT)) {
min(TRTEDT, vis4) - TRTSDT + 1
} else if (is.na(vis4) && !is.na(TRTSDT) && !is.na(RFENDT) && (RFENDT > TRTSDT)) {
TRTEDT - TRTSDT + 1
} else {
NA_real_
}
ds_doseint1 <- if (!is.na(doseint1)) doseint1 * 54 else NA_real_
# Dosing Interval 2 on 81 mg:
doseint2 <- if (!is.na(vis4) && !is.na(vis12)) {
min(TRTEDT, vis12) - vis4
} else if (is.na(vis12) && !is.na(vis4) && !is.na(RFENDT) && (RFENDT > vis4)) {
TRTEDT - vis4
} else {
NA_real_
}
ds_doseint2 <- if (!is.na(doseint2)) doseint2 * 81 else NA_real_
# Dosing Interval 3 on 54 mg:
doseint3 <- if (!is.na(vis12) && !is.na(RFENDT) && (RFENDT > vis12)) {
TRTEDT - vis12
} else {
NA_real_
}
ds_doseint3 <- if (!is.na(doseint3)) doseint3 * 54 else NA_real_
return(sum(c(ds_doseint1, ds_doseint2, ds_doseint3), na.rm = TRUE))
} else {
return(NA_real_)
}
}
# Compute cumulative dose using pmap_dbl (applies the function rowwise and returns a double)
adsl <- adsl %>%
mutate(
CUMDOSE = pmap_dbl(
list(TRT01AN, TRTDUR, TRTSDT, TRTEDT, RFENDT, `__vis4dt`, `__vis12dt`),
~ calculate_cumdose(..1, ..2, ..3, ..4, ..5, ..6, ..7)
),
AVGDD = if_else(!is.na(TRTDUR) & !is.na(CUMDOSE),
round(CUMDOSE / TRTDUR, 1),
as.numeric(NA))
)
# -----------------------------------------------
# Final Output Examination of Combined Data (adsl)
# -----------------------------------------------
cat("Structure of Combined Data (adsl):\n")Structure of Combined Data (adsl):
str(adsl)tibble [254 × 78] (S3: tbl_df/tbl/data.frame)
$ STUDYID : chr [1:254] "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" ...
..- attr(*, "label")= chr "Study Identifier"
$ DOMAIN : chr [1:254] "DM" "DM" "DM" "DM" ...
..- attr(*, "label")= chr "Domain Abbreviation"
$ USUBJID : chr [1:254] "01-701-1015" "01-701-1023" "01-701-1028" "01-701-1033" ...
..- attr(*, "label")= chr "Unique Subject Identifier"
$ SUBJID : chr [1:254] "1015" "1023" "1028" "1033" ...
..- attr(*, "label")= chr "Subject Identifier for the Study"
$ RFSTDTC : chr [1:254] "2014-01-02" "2012-08-05" "2013-07-19" "2014-03-18" ...
..- attr(*, "label")= chr "Subject Reference Start Date/Time"
$ RFENDTC : chr [1:254] "2014-07-02" "2012-09-02" "2014-01-14" "2014-04-14" ...
..- attr(*, "label")= chr "Subject Reference End Date/Time"
$ RFXSTDTC : chr [1:254] "2014-01-02" "2012-08-05" "2013-07-19" "2014-03-18" ...
..- attr(*, "label")= chr "Date/Time of First Study Treatment"
$ RFXENDTC : chr [1:254] "2014-07-02" "2012-09-01" "2014-01-14" "2014-03-31" ...
..- attr(*, "label")= chr "Date/Time of Last Study Treatment"
$ RFICDTC : chr [1:254] "" "" "" "" ...
..- attr(*, "label")= chr "Date/Time of Informed Consent"
$ RFPENDTC : chr [1:254] "2014-07-02T11:45" "2013-02-18" "2014-01-14T11:10" "2014-09-15" ...
..- attr(*, "label")= chr "Date/Time of End of Participation"
$ DTHDTC : chr [1:254] "" "" "" "" ...
..- attr(*, "label")= chr "Date/Time of Death"
$ DTHFL : chr [1:254] "" "" "" "" ...
..- attr(*, "label")= chr "Subject Death Flag"
$ SITEID : chr [1:254] "701" "701" "701" "701" ...
..- attr(*, "label")= chr "Study Site Identifier"
$ AGE : num [1:254] 63 64 71 74 77 85 68 81 84 52 ...
..- attr(*, "label")= chr "Age"
$ __origageu : chr [1:254] "YEARS" "YEARS" "YEARS" "YEARS" ...
..- attr(*, "label")= chr "Age Units"
$ SEX : chr [1:254] "F" "M" "M" "M" ...
..- attr(*, "label")= chr "Sex"
$ __origrace : chr [1:254] "WHITE" "WHITE" "WHITE" "WHITE" ...
..- attr(*, "label")= chr "Race"
$ __origethnic: chr [1:254] "HISPANIC OR LATINO" "HISPANIC OR LATINO" "NOT HISPANIC OR LATINO" "NOT HISPANIC OR LATINO" ...
..- attr(*, "label")= chr "Ethnicity"
$ ARMCD : chr [1:254] "Pbo" "Pbo" "Xan_Hi" "Xan_Lo" ...
..- attr(*, "label")= chr "Planned Arm Code"
$ ARM : chr [1:254] "Placebo" "Placebo" "Xanomeline High Dose" "Xanomeline Low Dose" ...
..- attr(*, "label")= chr "Description of Planned Arm"
$ ACTARMCD : chr [1:254] "Pbo" "Pbo" "Xan_Hi" "Xan_Lo" ...
..- attr(*, "label")= chr "Actual Arm Code"
$ ACTARM : chr [1:254] "Placebo" "Placebo" "Xanomeline High Dose" "Xanomeline Low Dose" ...
..- attr(*, "label")= chr "Description of Actual Arm"
$ COUNTRY : chr [1:254] "USA" "USA" "USA" "USA" ...
..- attr(*, "label")= chr "Country"
$ DMDTC : chr [1:254] "2013-12-26" "2012-07-22" "2013-07-11" "2014-03-10" ...
..- attr(*, "label")= chr "Date/Time of Collection"
$ DMDY : num [1:254] -7 -14 -8 -8 -7 -21 -9 -13 -7 -13 ...
..- attr(*, "label")= chr "Study Day of Collection"
$ AGEU : chr [1:254] "YEARS" "YEARS" "YEARS" "YEARS" ...
$ RACE : chr [1:254] "WHITE" "WHITE" "WHITE" "WHITE" ...
$ ETHNIC : chr [1:254] "HISPANIC OR LATINO" "HISPANIC OR LATINO" "NOT HISPANIC OR LATINO" "NOT HISPANIC OR LATINO" ...
$ SITEGR1 : chr [1:254] "701" "701" "701" "701" ...
$ TRT01P : chr [1:254] "Placebo" "Placebo" "Xanomeline High Dose" "Xanomeline Low Dose" ...
..- attr(*, "label")= chr "Description of Planned Arm"
$ TRT01PN : num [1:254] 0 0 81 54 81 0 54 54 54 0 ...
$ AGEGR1 : chr [1:254] "<65" "<65" "65-80" "65-80" ...
$ AGEGR1N : num [1:254] 1 1 2 2 2 3 2 3 3 1 ...
$ RACEN : num [1:254] 1 1 1 1 1 1 1 1 1 1 ...
$ ITTFL : chr [1:254] "Y" "Y" "Y" "Y" ...
$ RFENDT : Date[1:254], format: "2014-07-02" "2012-09-02" ...
$ VISNUMEN : num [1:254] NA NA NA NA NA NA NA NA NA NA ...
$ DCDECOD : chr [1:254] NA NA NA NA ...
$ DCREASCD : chr [1:254] NA NA NA NA ...
$ DISCONFL : chr [1:254] NA NA NA NA ...
$ DSRAEFL : chr [1:254] NA NA NA NA ...
$ HEIGHTBL : num [1:254] 147 163 178 175 155 ...
..- attr(*, "label")= chr "Numeric Result/Finding in Standard Units"
$ WEIGHTBL : num [1:254] 54.4 80.3 99.3 88.4 62.6 67.1 78 59.9 78.9 71.2 ...
..- attr(*, "label")= chr "Numeric Result/Finding in Standard Units"
$ VISIT1DT : Date[1:254], format: "2013-12-26" "2012-07-22" ...
$ TRTSDT : Date[1:254], format: "2014-01-02" "2012-08-05" ...
$ __vis4dt : Date[1:254], format: "2014-01-16" "2012-08-27" ...
$ __vis8dt : Date[1:254], format: "2014-03-05" NA ...
$ __vis10dt : Date[1:254], format: "2014-05-07" NA ...
$ __vis12dt : Date[1:254], format: "2014-06-18" NA ...
$ DISONSDT : Date[1:254], format: "2010-04-30" "2006-03-11" ...
$ MMSETOT : num [1:254] 0 0 0 0 0 0 0 0 0 0 ...
$ __effalz : num [1:254] 0 0 0 0 0 0 0 0 0 0 ...
$ __effcli : num [1:254] 0 0 0 0 0 0 0 0 0 0 ...
$ EX03ST : Date[1:254], format: "2014-01-02" "2012-08-05" ...
$ EX04ST : Date[1:254], format: "2014-01-17" "2012-08-28" ...
$ EX12ST : Date[1:254], format: "2014-06-19" NA ...
$ EX03EN : Date[1:254], format: "2014-01-16" "2012-08-27" ...
$ EX04EN : Date[1:254], format: "2014-06-18" "2012-09-01" ...
$ EX12EN : Date[1:254], format: "2014-07-02" NA ...
$ EX03DS : num [1:254] 0 0 54 54 54 0 54 54 54 0 ...
..- attr(*, "label")= chr "Dose"
$ EX04DS : num [1:254] 0 0 81 NA 81 0 54 NA 54 0 ...
..- attr(*, "label")= chr "Dose"
$ EX12DS : num [1:254] 0 NA 54 NA 54 NA 54 NA NA 0 ...
..- attr(*, "label")= chr "Dose"
$ TRTEDT : Date[1:254], format: "2014-07-02" "2012-09-01" ...
$ EDUCLVL : num [1:254] NA NA NA NA NA NA NA NA NA NA ...
..- attr(*, "label")= chr "Numeric Result/Finding in Standard Units"
$ TRT01A : chr [1:254] "Placebo" "Placebo" "Xanomeline High Dose" "Xanomeline Low Dose" ...
..- attr(*, "label")= chr "Description of Planned Arm"
$ TRT01AN : num [1:254] 0 0 81 54 81 0 54 54 54 0 ...
$ SAFFL : chr [1:254] "Y" "Y" "Y" "Y" ...
$ EFFFL : chr [1:254] "N" "N" "N" "N" ...
$ BMIBL : num [1:254] 25.1 30.4 31.4 28.8 26.1 30.4 27.3 23.9 23.9 21.9 ...
$ BMIBLGR1 : chr [1:254] "25-<30" ">=30" ">=30" "25-<30" ...
$ DURDIS : num [1:254] 43.9 76.4 42.8 55.3 32.9 ...
$ DURDSGR1 : chr [1:254] ">=12" ">=12" ">=12" ">=12" ...
$ COMP8FL : chr [1:254] "Y" "N" "Y" "N" ...
$ COMP16FL : chr [1:254] "Y" "N" "Y" "N" ...
$ COMP24FL : chr [1:254] "Y" "N" "Y" "N" ...
$ TRTDUR : num [1:254] 182 28 180 14 183 26 190 10 55 182 ...
$ CUMDOSE : num [1:254] 0 0 13986 756 14067 ...
$ AVGDD : num [1:254] 0 0 77.7 54 76.9 0 54 54 54 0 ...
Create Final Dataset
/**********************************************/
/*** BEGIN SECTION TO CREATE FINAL DATA SET ***/
/**********************************************/
data ADAM.ADSL (label = 'Subject-Level Analysis Data');
set adslskel adsl;
keep &allvars;
run;
/* compare to the CDISC version */
proc compare base = CADAM.ADSL compare = ADAM.ADSL listall;
id USUBJID;
run;
/********************************************/
/*** END SECTION TO CREATE FINAL DATA SET ***/
/********************************************/1 /**********************************************/
2 /*** BEGIN SECTION TO CREATE FINAL DATA SET ***/
3 /**********************************************/
4 data ADAM.ADSL (label = 'Subject-Level Analysis Data');
5 set adslskel adsl;
6 keep &allvars;
7 run;
NOTE: There were 0 observations read from the data set WORK.ADSLSKEL.
NOTE: There were 254 observations read from the data set WORK.ADSL.
NOTE: The data set ADAM.ADSL has 254 observations and 48 variables.
NOTE: DATA statement used (Total process time):
real time 0.04 seconds
cpu time 0.01 seconds
8
9 /* compare to the CDISC version */
10 proc compare base = CADAM.ADSL compare = ADAM.ADSL listall;
11 id USUBJID;
12 run;
NOTE: There were 254 observations read from the data set CADAM.ADSL.
NOTE: There were 254 observations read from the data set ADAM.ADSL.
NOTE: PROCEDURE COMPARE used (Total process time):
real time 0.04 seconds
cpu time 0.04 seconds
2 The SAS System 20:17 Monday, March 3, 2025
13 /********************************************/
14 /*** END SECTION TO CREATE FINAL DATA SET ***/
15 /********************************************/# -----------------------------------------------
# Section 8: Create Final ADaM ADSL Dataset and Compare to Reference
# -----------------------------------------------
# If the shell dataset is empty, simply use adsl.
if (nrow(adsl_shell) == 0) {
final_adsl <- adsl
} else {
# If adsl_shell is not empty, convert relevant date columns to Date type.
adsl_shell <- adsl_shell %>%
mutate(
TRTSDT = as.Date(TRTSDT, origin = "1970-01-01"),
TRTEDT = as.Date(TRTEDT, origin = "1970-01-01"),
VISIT1DT = as.Date(VISIT1DT, origin = "1970-01-01"),
RFENDT = as.Date(RFENDT, origin = "1970-01-01")
)
final_adsl <- bind_rows(adsl_shell, adsl)
}
# Restrict final_adsl to only the variables specified in adsl_specs$Variable.
# This replicates SAS "keep &allvars;" where &allvars is built from adsl_specs$Variable.
allvars <- adsl_specs$Variable
final_adsl <- final_adsl %>% select(all_of(allvars))
# Assign a label attribute to the final dataset (for documentation purposes).
attr(final_adsl, "label") <- "Subject-Level Analysis Data"
# Save the final ADaM ADSL dataset in an object (simulate ADAM.ADSL).
ADAM_ADSL <- final_adsl
# -----------------------------------------------
# Compare the Final ADaM ADSL Dataset to the Reference CDISC Version
# -----------------------------------------------
# Assume the reference dataset is loaded as CADAM_ADSL.
# Use the waldo package to compare the two datasets by USUBJID.
# Load the reference CDISC ADaM ADSL data
CADAM_ADSL <- adam_adsl
# View its structure to confirm
str(CADAM_ADSL)tibble [254 × 48] (S3: tbl_df/tbl/data.frame)
$ STUDYID : chr [1:254] "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" ...
..- attr(*, "label")= chr "Study Identifier"
$ USUBJID : chr [1:254] "01-701-1015" "01-701-1023" "01-701-1028" "01-701-1033" ...
..- attr(*, "label")= chr "Unique Subject Identifier"
$ SUBJID : chr [1:254] "1015" "1023" "1028" "1033" ...
..- attr(*, "label")= chr "Subject Identifier for the Study"
$ SITEID : chr [1:254] "701" "701" "701" "701" ...
..- attr(*, "label")= chr "Study Site Identifier"
$ SITEGR1 : chr [1:254] "701" "701" "701" "701" ...
..- attr(*, "label")= chr "Pooled Site Group 1"
$ ARM : chr [1:254] "Placebo" "Placebo" "Xanomeline High Dose" "Xanomeline Low Dose" ...
..- attr(*, "label")= chr "Description of Planned Arm"
$ TRT01P : chr [1:254] "Placebo" "Placebo" "Xanomeline High Dose" "Xanomeline Low Dose" ...
..- attr(*, "label")= chr "Planned Treatment for Period 01"
$ TRT01PN : num [1:254] 0 0 81 54 81 0 54 54 54 0 ...
..- attr(*, "label")= chr "Planned Treatment for Period 01 (N)"
$ TRT01A : chr [1:254] "Placebo" "Placebo" "Xanomeline High Dose" "Xanomeline Low Dose" ...
..- attr(*, "label")= chr "Actual Treatment for Period 01"
$ TRT01AN : num [1:254] 0 0 81 54 81 0 54 54 54 0 ...
..- attr(*, "label")= chr "Actual Treatment for Period 01 (N)"
$ TRTSDT : Date[1:254], format: "2014-01-02" "2012-08-05" ...
$ TRTEDT : Date[1:254], format: "2014-07-02" "2012-09-01" ...
$ TRTDUR : num [1:254] 182 28 180 14 183 26 190 10 55 182 ...
..- attr(*, "label")= chr "Duration of Treatment (days)"
$ AVGDD : num [1:254] 0 0 77.7 54 76.9 0 54 54 54 0 ...
..- attr(*, "label")= chr "Avg Daily Dose (as planned)"
$ CUMDOSE : num [1:254] 0 0 13986 756 14067 ...
..- attr(*, "label")= chr "Cumulative Dose (as planned)"
$ AGE : num [1:254] 63 64 71 74 77 85 68 81 84 52 ...
..- attr(*, "label")= chr "Age"
$ AGEGR1 : chr [1:254] "<65" "<65" "65-80" "65-80" ...
..- attr(*, "label")= chr "Pooled Age Group 1"
$ AGEGR1N : num [1:254] 1 1 2 2 2 3 2 3 3 1 ...
..- attr(*, "label")= chr "Pooled Age Group 1 (N)"
$ AGEU : chr [1:254] "YEARS" "YEARS" "YEARS" "YEARS" ...
..- attr(*, "label")= chr "Age Units"
$ RACE : chr [1:254] "WHITE" "WHITE" "WHITE" "WHITE" ...
..- attr(*, "label")= chr "Race"
$ RACEN : num [1:254] 1 1 1 1 1 1 1 1 1 1 ...
..- attr(*, "label")= chr "Race (N)"
$ SEX : chr [1:254] "F" "M" "M" "M" ...
..- attr(*, "label")= chr "Sex"
$ ETHNIC : chr [1:254] "HISPANIC OR LATINO" "HISPANIC OR LATINO" "NOT HISPANIC OR LATINO" "NOT HISPANIC OR LATINO" ...
..- attr(*, "label")= chr "Ethnicity"
$ SAFFL : chr [1:254] "Y" "Y" "Y" "Y" ...
..- attr(*, "label")= chr "Safety Population Flag"
$ ITTFL : chr [1:254] "Y" "Y" "Y" "Y" ...
..- attr(*, "label")= chr "Intent-To-Treat Population Flag"
$ EFFFL : chr [1:254] "Y" "Y" "Y" "Y" ...
..- attr(*, "label")= chr "Efficacy Population Flag"
$ COMP8FL : chr [1:254] "Y" "N" "Y" "N" ...
..- attr(*, "label")= chr "Completers of Week 8 Population Flag"
$ COMP16FL: chr [1:254] "Y" "N" "Y" "N" ...
..- attr(*, "label")= chr "Completers of Week 16 Population Flag"
$ COMP24FL: chr [1:254] "Y" "N" "Y" "N" ...
..- attr(*, "label")= chr "Completers of Week 24 Population Flag"
$ DISCONFL: chr [1:254] "" "Y" "" "Y" ...
..- attr(*, "label")= chr "Did the Subject Discontinue the Study?"
$ DSRAEFL : chr [1:254] "" "Y" "" "" ...
..- attr(*, "label")= chr "Discontinued due to AE?"
$ DTHFL : chr [1:254] "" "" "" "" ...
..- attr(*, "label")= chr "Subject Died?"
$ BMIBL : num [1:254] 25.1 30.4 31.4 28.8 26.1 30.4 27.3 23.9 23.9 21.9 ...
..- attr(*, "label")= chr "Baseline BMI (kg/m^2)"
$ BMIBLGR1: chr [1:254] "25-<30" ">=30" ">=30" "25-<30" ...
..- attr(*, "label")= chr "Pooled Baseline BMI Group 1"
$ HEIGHTBL: num [1:254] 147 163 178 175 155 ...
..- attr(*, "label")= chr "Baseline Height (cm)"
$ WEIGHTBL: num [1:254] 54.4 80.3 99.3 88.5 62.6 67.1 78 59.9 78.9 71.2 ...
..- attr(*, "label")= chr "Baseline Weight (kg)"
$ EDUCLVL : num [1:254] 16 14 16 12 9 8 18 22 12 14 ...
..- attr(*, "label")= chr "Years of Education"
$ DISONSDT: Date[1:254], format: "2010-04-30" "2006-03-11" ...
$ DURDIS : num [1:254] 43.9 76.4 42.8 55.3 32.9 ...
..- attr(*, "label")= chr "Duration of Disease (Months)"
$ DURDSGR1: chr [1:254] ">=12" ">=12" ">=12" ">=12" ...
..- attr(*, "label")= chr "Pooled Disease Duration Group 1"
$ VISIT1DT: Date[1:254], format: "2013-12-26" "2012-07-22" ...
$ RFSTDTC : chr [1:254] "2014-01-02" "2012-08-05" "2013-07-19" "2014-03-18" ...
..- attr(*, "label")= chr "Subject Reference Start Date/Time"
$ RFENDTC : chr [1:254] "2014-07-02" "2012-09-02" "2014-01-14" "2014-04-14" ...
..- attr(*, "label")= chr "Subject Reference End Date/Time"
$ VISNUMEN: num [1:254] 12 5 12 5 12 6 12 4 8 12 ...
..- attr(*, "label")= chr "End of Trt Visit (Vis 12 or Early Term.)"
$ RFENDT : Date[1:254], format: "2014-07-02" "2012-09-02" ...
$ DCDECOD : chr [1:254] "COMPLETED" "ADVERSE EVENT" "COMPLETED" "STUDY TERMINATED BY SPONSOR" ...
..- attr(*, "label")= chr "Standardized Disposition Term"
$ DCREASCD: chr [1:254] "Completed" "Adverse Event" "Completed" "Sponsor Decision" ...
..- attr(*, "label")= chr "Reason for Discontinuation"
$ MMSETOT : num [1:254] 23 23 23 23 21 23 10 23 20 20 ...
..- attr(*, "label")= chr "MMSE Total"
# Sort both datasets by USUBJID before comparing.
compare(
CADAM_ADSL %>% arrange(USUBJID),
ADAM_ADSL %>% arrange(USUBJID),
x_arg = "CADAM.ADSL", y_arg = "ADAM.ADSL",
ignore_attr = TRUE,
max_diffs = Inf
) CADAM.ADSL[[12]] | ADAM.ADSL[[12]]
[96] 16093.0 | 16093.0 [96]
[97] 15956.0 | 15956.0 [97]
[98] 16136.0 | 16136.0 [98]
[99] 15838.0 - NA [99]
[100] 15737.0 | 15737.0 [100]
[101] 16058.0 | 16058.0 [101]
[102] 16279.0 | 16279.0 [102]
`CADAM.ADSL[[13]][96:102]`: 83.0 183.0 63.0 1.0 148.0 180.0 210.0
`ADAM.ADSL[[13]][96:102]`: 83.0 183.0 63.0 NA 148.0 180.0 210.0
`CADAM.ADSL[[14]][63:69]`: 0.00 72.40 54.00 74.30 72.20 76.50 54.00
`ADAM.ADSL[[14]][63:69]`: 0.00 72.40 54.00 74.20 72.20 76.50 54.00
`CADAM.ADSL[[14]][96:102]`: 74.20 0.00 71.60 54.00 54.00 54.00 0.00
`ADAM.ADSL[[14]][96:102]`: 74.20 0.00 71.60 NA 54.00 54.00 0.00
`CADAM.ADSL[[14]][122:128]`: 0.00 76.70 0.00 74.30 54.00 54.00 54.00
`ADAM.ADSL[[14]][122:128]`: 0.00 76.70 0.00 74.20 54.00 54.00 54.00
`CADAM.ADSL[[15]][96:102]`: 6156.0 0.0 4509.0 54.0 7992.0 9720.0 0.0
`ADAM.ADSL[[15]][96:102]`: 6156.0 0.0 4509.0 0.0 7992.0 9720.0 0.0
`CADAM.ADSL[[21]][21:27]`: 1.0 1.0 1.0 6.0 1.0 1.0 1.0
`ADAM.ADSL[[21]][21:27]`: 1.0 1.0 1.0 3.0 1.0 1.0 1.0
CADAM.ADSL[[26]] | ADAM.ADSL[[26]]
[1] "Y" - "N" [1]
[2] "Y" - "N" [2]
[3] "Y" - "N" [3]
[4] "Y" - "N" [4]
[5] "Y" - "N" [5]
[6] "Y" - "N" [6]
[7] "Y" - "N" [7]
[8] "Y" - "N" [8]
[9] "Y" - "N" [9]
[10] "Y" - "N" [10]
[11] "Y" - "N" [11]
[12] "Y" - "N" [12]
[13] "Y" - "N" [13]
[14] "Y" - "N" [14]
[15] "Y" - "N" [15]
[16] "Y" - "N" [16]
[17] "Y" - "N" [17]
[18] "Y" - "N" [18]
[19] "Y" - "N" [19]
[20] "Y" - "N" [20]
[21] "Y" - "N" [21]
[22] "Y" - "N" [22]
[23] "Y" - "N" [23]
[24] "Y" - "N" [24]
[25] "Y" - "N" [25]
[26] "Y" - "N" [26]
[27] "Y" - "N" [27]
[28] "Y" - "N" [28]
[29] "Y" - "N" [29]
[30] "Y" - "N" [30]
[31] "Y" - "N" [31]
[32] "Y" - "N" [32]
[33] "Y" - "N" [33]
[34] "Y" - "N" [34]
[35] "Y" - "N" [35]
[36] "Y" - "N" [36]
[37] "Y" - "N" [37]
[38] "Y" - "N" [38]
[39] "Y" - "N" [39]
[40] "Y" - "N" [40]
[41] "Y" - "N" [41]
[42] "Y" - "N" [42]
[43] "Y" - "N" [43]
[44] "Y" - "N" [44]
[45] "Y" - "N" [45]
[46] "N" | "N" [46]
[47] "Y" - "N" [47]
[48] "Y" - "N" [48]
[49] "Y" - "N" [49]
[50] "Y" - "N" [50]
[51] "Y" - "N" [51]
[52] "Y" - "N" [52]
[53] "Y" - "N" [53]
[54] "N" | "N" [54]
[55] "Y" - "N" [55]
[56] "Y" - "N" [56]
[57] "Y" - "N" [57]
[58] "Y" - "N" [58]
[59] "N" | "N" [59]
[60] "Y" - "N" [60]
[61] "Y" - "N" [61]
[62] "Y" - "N" [62]
[63] "Y" - "N" [63]
[64] "Y" - "N" [64]
[65] "Y" - "N" [65]
[66] "Y" - "N" [66]
[67] "Y" - "N" [67]
[68] "Y" - "N" [68]
[69] "Y" - "N" [69]
[70] "Y" - "N" [70]
[71] "Y" - "N" [71]
[72] "Y" - "N" [72]
[73] "Y" - "N" [73]
[74] "Y" - "N" [74]
[75] "Y" - "N" [75]
[76] "Y" - "N" [76]
[77] "Y" - "N" [77]
[78] "Y" - "N" [78]
[79] "N" | "N" [79]
[80] "Y" - "N" [80]
[81] "Y" - "N" [81]
[82] "Y" - "N" [82]
[83] "Y" - "N" [83]
[84] "Y" - "N" [84]
[85] "Y" - "N" [85]
[86] "N" | "N" [86]
[87] "Y" - "N" [87]
[88] "Y" - "N" [88]
[89] "N" | "N" [89]
[90] "Y" - "N" [90]
[91] "Y" - "N" [91]
[92] "Y" - "N" [92]
[93] "Y" - "N" [93]
[94] "Y" - "N" [94]
[95] "Y" - "N" [95]
[96] "Y" - "N" [96]
[97] "Y" - "N" [97]
[98] "N" | "N" [98]
[99] "N" | "N" [99]
[100] "Y" - "N" [100]
[101] "Y" - "N" [101]
[102] "Y" - "N" [102]
[103] "Y" - "N" [103]
[104] "Y" - "N" [104]
[105] "Y" - "N" [105]
[106] "Y" - "N" [106]
[107] "Y" - "N" [107]
[108] "Y" - "N" [108]
[109] "Y" - "N" [109]
[110] "Y" - "N" [110]
[111] "Y" - "N" [111]
[112] "Y" - "N" [112]
[113] "Y" - "N" [113]
[114] "N" | "N" [114]
[115] "Y" - "N" [115]
[116] "N" | "N" [116]
[117] "Y" - "N" [117]
[118] "Y" - "N" [118]
[119] "Y" - "N" [119]
[120] "Y" - "N" [120]
[121] "Y" - "N" [121]
[122] "Y" - "N" [122]
[123] "Y" - "N" [123]
[124] "Y" - "N" [124]
[125] "Y" - "N" [125]
[126] "Y" - "N" [126]
[127] "Y" - "N" [127]
[128] "N" | "N" [128]
[129] "Y" - "N" [129]
[130] "Y" - "N" [130]
[131] "Y" - "N" [131]
[132] "Y" - "N" [132]
[133] "N" | "N" [133]
[134] "Y" - "N" [134]
[135] "Y" - "N" [135]
[136] "Y" - "N" [136]
[137] "Y" - "N" [137]
[138] "Y" - "N" [138]
[139] "Y" - "N" [139]
[140] "Y" - "N" [140]
[141] "Y" - "N" [141]
[142] "Y" - "N" [142]
[143] "Y" - "N" [143]
[144] "Y" - "N" [144]
[145] "Y" - "N" [145]
[146] "Y" - "N" [146]
[147] "Y" - "N" [147]
[148] "Y" - "N" [148]
[149] "Y" - "N" [149]
[150] "Y" - "N" [150]
[151] "Y" - "N" [151]
[152] "Y" - "N" [152]
[153] "Y" - "N" [153]
[154] "Y" - "N" [154]
[155] "N" | "N" [155]
[156] "Y" - "N" [156]
[157] "Y" - "N" [157]
[158] "Y" - "N" [158]
[159] "Y" - "N" [159]
[160] "Y" - "N" [160]
[161] "Y" - "N" [161]
[162] "Y" - "N" [162]
[163] "N" | "N" [163]
[164] "N" | "N" [164]
[165] "Y" - "N" [165]
[166] "Y" - "N" [166]
[167] "Y" - "N" [167]
[168] "Y" - "N" [168]
[169] "Y" - "N" [169]
[170] "Y" - "N" [170]
[171] "Y" - "N" [171]
[172] "Y" - "N" [172]
[173] "Y" - "N" [173]
[174] "N" | "N" [174]
[175] "Y" - "N" [175]
[176] "Y" - "N" [176]
[177] "N" | "N" [177]
[178] "Y" - "N" [178]
[179] "Y" - "N" [179]
[180] "Y" - "N" [180]
[181] "Y" - "N" [181]
[182] "Y" - "N" [182]
[183] "Y" - "N" [183]
[184] "Y" - "N" [184]
[185] "Y" - "N" [185]
[186] "Y" - "N" [186]
[187] "N" | "N" [187]
[188] "Y" - "N" [188]
[189] "Y" - "N" [189]
[190] "Y" - "N" [190]
[191] "N" | "N" [191]
[192] "Y" - "N" [192]
[193] "Y" - "N" [193]
[194] "Y" - "N" [194]
[195] "Y" - "N" [195]
[196] "Y" - "N" [196]
[197] "Y" - "N" [197]
[198] "Y" - "N" [198]
[199] "Y" - "N" [199]
[200] "Y" - "N" [200]
[201] "Y" - "N" [201]
[202] "Y" - "N" [202]
[203] "Y" - "N" [203]
[204] "Y" - "N" [204]
[205] "N" | "N" [205]
[206] "Y" - "N" [206]
[207] "Y" - "N" [207]
[208] "Y" - "N" [208]
[209] "Y" - "N" [209]
[210] "Y" - "N" [210]
[211] "Y" - "N" [211]
[212] "Y" - "N" [212]
[213] "Y" - "N" [213]
[214] "Y" - "N" [214]
[215] "Y" - "N" [215]
[216] "Y" - "N" [216]
[217] "Y" - "N" [217]
[218] "Y" - "N" [218]
[219] "Y" - "N" [219]
[220] "Y" - "N" [220]
[221] "Y" - "N" [221]
[222] "Y" - "N" [222]
[223] "Y" - "N" [223]
[224] "Y" - "N" [224]
[225] "Y" - "N" [225]
[226] "Y" - "N" [226]
[227] "Y" - "N" [227]
[228] "Y" - "N" [228]
[229] "Y" - "N" [229]
[230] "Y" - "N" [230]
[231] "Y" - "N" [231]
[232] "Y" - "N" [232]
[233] "Y" - "N" [233]
[234] "Y" - "N" [234]
[235] "Y" - "N" [235]
[236] "Y" - "N" [236]
[237] "Y" - "N" [237]
[238] "Y" - "N" [238]
[239] "Y" - "N" [239]
[240] "Y" - "N" [240]
[241] "Y" - "N" [241]
[242] "Y" - "N" [242]
[243] "Y" - "N" [243]
[244] "Y" - "N" [244]
[245] "Y" - "N" [245]
[246] "Y" - "N" [246]
[247] "Y" - "N" [247]
[248] "Y" - "N" [248]
[249] "Y" - "N" [249]
[250] "Y" - "N" [250]
[251] "Y" - "N" [251]
[252] "Y" - "N" [252]
[253] "Y" - "N" [253]
[254] "Y" - "N" [254]
CADAM.ADSL[[30]] | ADAM.ADSL[[30]]
[1] "" - NA [1]
[2] "Y" - NA [2]
[3] "" - NA [3]
[4] "Y" - NA [4]
[5] "" - NA [5]
[6] "Y" - NA [6]
[7] "" - NA [7]
[8] "Y" - NA [8]
[9] "Y" - NA [9]
[10] "" - NA [10]
[11] "" - NA [11]
[12] "" - NA [12]
[13] "Y" - NA [13]
[14] "" - NA [14]
[15] "" - NA [15]
[16] "Y" - NA [16]
[17] "Y" - NA [17]
[18] "Y" - NA [18]
[19] "" - NA [19]
[20] "" - NA [20]
[21] "Y" - NA [21]
[22] "" - NA [22]
[23] "" - NA [23]
[24] "Y" - NA [24]
[25] "" - NA [25]
[26] "Y" - NA [26]
[27] "Y" - NA [27]
[28] "" - NA [28]
[29] "" - NA [29]
[30] "Y" - NA [30]
[31] "Y" - NA [31]
[32] "Y" - NA [32]
[33] "" - NA [33]
[34] "" - NA [34]
[35] "Y" - NA [35]
[36] "" - NA [36]
[37] "" - NA [37]
[38] "Y" - NA [38]
[39] "" - NA [39]
[40] "" - NA [40]
[41] "Y" - NA [41]
[42] "Y" - NA [42]
[43] "" - NA [43]
[44] "Y" - NA [44]
[45] "Y" - NA [45]
[46] "Y" - NA [46]
[47] "" - NA [47]
[48] "Y" - NA [48]
[49] "Y" - NA [49]
[50] "Y" - NA [50]
[51] "Y" - NA [51]
[52] "" - NA [52]
[53] "Y" - NA [53]
[54] "Y" - NA [54]
[55] "Y" - NA [55]
[56] "" - NA [56]
[57] "Y" - NA [57]
[58] "" - NA [58]
[59] "Y" - NA [59]
[60] "" - NA [60]
[61] "Y" - NA [61]
[62] "Y" - NA [62]
[63] "Y" - NA [63]
[64] "Y" - NA [64]
[65] "Y" - NA [65]
[66] "Y" - NA [66]
[67] "Y" - NA [67]
[68] "Y" - NA [68]
[69] "Y" - NA [69]
[70] "Y" - NA [70]
[71] "" - NA [71]
[72] "" - NA [72]
[73] "" - NA [73]
[74] "" - NA [74]
[75] "Y" - NA [75]
[76] "Y" - NA [76]
[77] "Y" - NA [77]
[78] "Y" - NA [78]
[79] "Y" - NA [79]
[80] "Y" - NA [80]
[81] "Y" - NA [81]
[82] "" - NA [82]
[83] "" - NA [83]
[84] "Y" - NA [84]
[85] "Y" - NA [85]
[86] "Y" - NA [86]
[87] "Y" - NA [87]
[88] "Y" - NA [88]
[89] "Y" - NA [89]
[90] "Y" - NA [90]
[91] "" - NA [91]
[92] "Y" - NA [92]
[93] "" - NA [93]
[94] "" - NA [94]
[95] "Y" - NA [95]
[96] "Y" - NA [96]
[97] "" - NA [97]
[98] "Y" - NA [98]
[99] "Y" - NA [99]
[100] "Y" - NA [100]
[101] "" - NA [101]
[102] "" - NA [102]
[103] "Y" - NA [103]
[104] "Y" - NA [104]
[105] "Y" - NA [105]
[106] "" - NA [106]
[107] "Y" - NA [107]
[108] "Y" - NA [108]
[109] "" - NA [109]
[110] "" - NA [110]
[111] "Y" - NA [111]
[112] "" - NA [112]
[113] "Y" - NA [113]
[114] "Y" - NA [114]
[115] "Y" - NA [115]
[116] "Y" - NA [116]
[117] "" - NA [117]
[118] "Y" - NA [118]
[119] "" - NA [119]
[120] "" - NA [120]
[121] "Y" - NA [121]
[122] "" - NA [122]
[123] "" - NA [123]
[124] "" - NA [124]
[125] "Y" - NA [125]
[126] "" - NA [126]
[127] "Y" - NA [127]
[128] "Y" - NA [128]
[129] "Y" - NA [129]
[130] "" - NA [130]
[131] "Y" - NA [131]
[132] "" - NA [132]
[133] "Y" - NA [133]
[134] "" - NA [134]
[135] "" - NA [135]
[136] "Y" - NA [136]
[137] "" - NA [137]
[138] "" - NA [138]
[139] "Y" - NA [139]
[140] "Y" - NA [140]
[141] "Y" - NA [141]
[142] "Y" - NA [142]
[143] "Y" - NA [143]
[144] "Y" - NA [144]
[145] "" - NA [145]
[146] "Y" - NA [146]
[147] "" - NA [147]
[148] "" - NA [148]
[149] "" - NA [149]
[150] "Y" - NA [150]
[151] "" - NA [151]
[152] "Y" - NA [152]
[153] "Y" - NA [153]
[154] "" - NA [154]
[155] "Y" - NA [155]
[156] "" - NA [156]
[157] "Y" - NA [157]
[158] "Y" - NA [158]
[159] "" - NA [159]
[160] "Y" - NA [160]
[161] "" - NA [161]
[162] "" - NA [162]
[163] "Y" - NA [163]
[164] "Y" - NA [164]
[165] "Y" - NA [165]
[166] "Y" - NA [166]
[167] "Y" - NA [167]
[168] "" - NA [168]
[169] "" - NA [169]
[170] "" - NA [170]
[171] "" - NA [171]
[172] "Y" - NA [172]
[173] "Y" - NA [173]
[174] "Y" - NA [174]
[175] "Y" - NA [175]
[176] "Y" - NA [176]
[177] "Y" - NA [177]
[178] "Y" - NA [178]
[179] "" - NA [179]
[180] "Y" - NA [180]
[181] "" - NA [181]
[182] "Y" - NA [182]
[183] "" - NA [183]
[184] "Y" - NA [184]
[185] "" - NA [185]
[186] "Y" - NA [186]
[187] "Y" - NA [187]
[188] "" - NA [188]
[189] "" - NA [189]
[190] "" - NA [190]
[191] "Y" - NA [191]
[192] "" - NA [192]
[193] "" - NA [193]
[194] "" - NA [194]
[195] "" - NA [195]
[196] "Y" - NA [196]
[197] "" - NA [197]
[198] "Y" - NA [198]
[199] "" - NA [199]
[200] "" - NA [200]
[201] "" - NA [201]
[202] "Y" - NA [202]
[203] "" - NA [203]
[204] "Y" - NA [204]
[205] "Y" - NA [205]
[206] "" - NA [206]
[207] "Y" - NA [207]
[208] "Y" - NA [208]
[209] "" - NA [209]
[210] "Y" - NA [210]
[211] "" - NA [211]
[212] "" - NA [212]
[213] "Y" - NA [213]
[214] "" - NA [214]
[215] "Y" - NA [215]
[216] "Y" - NA [216]
[217] "Y" - NA [217]
[218] "" - NA [218]
[219] "" - NA [219]
[220] "Y" - NA [220]
[221] "" - NA [221]
[222] "" - NA [222]
[223] "" - NA [223]
[224] "" - NA [224]
[225] "Y" - NA [225]
[226] "Y" - NA [226]
[227] "Y" - NA [227]
[228] "Y" - NA [228]
[229] "Y" - NA [229]
[230] "" - NA [230]
[231] "Y" - NA [231]
[232] "" - NA [232]
[233] "" - NA [233]
[234] "" - NA [234]
[235] "" - NA [235]
[236] "" - NA [236]
[237] "" - NA [237]
[238] "Y" - NA [238]
[239] "Y" - NA [239]
[240] "Y" - NA [240]
[241] "" - NA [241]
[242] "Y" - NA [242]
[243] "Y" - NA [243]
[244] "Y" - NA [244]
[245] "" - NA [245]
[246] "" - NA [246]
[247] "Y" - NA [247]
[248] "Y" - NA [248]
[249] "Y" - NA [249]
[250] "" - NA [250]
[251] "Y" - NA [251]
[252] "" - NA [252]
[253] "Y" - NA [253]
[254] "Y" - NA [254]
CADAM.ADSL[[31]] | ADAM.ADSL[[31]]
[1] "" - NA [1]
[2] "Y" - NA [2]
[3] "" - NA [3]
[4] "" - NA [4]
[5] "" - NA [5]
[6] "Y" - NA [6]
[7] "" - NA [7]
[8] "Y" - NA [8]
[9] "Y" - NA [9]
[10] "" - NA [10]
[11] "" - NA [11]
[12] "" - NA [12]
[13] "Y" - NA [13]
[14] "" - NA [14]
[15] "" - NA [15]
[16] "Y" - NA [16]
[17] "Y" - NA [17]
[18] "Y" - NA [18]
[19] "" - NA [19]
[20] "" - NA [20]
[21] "" - NA [21]
[22] "" - NA [22]
[23] "" - NA [23]
[24] "" - NA [24]
[25] "" - NA [25]
[26] "Y" - NA [26]
[27] "Y" - NA [27]
[28] "" - NA [28]
[29] "" - NA [29]
[30] "Y" - NA [30]
[31] "" - NA [31]
[32] "" - NA [32]
[33] "" - NA [33]
[34] "" - NA [34]
[35] "" - NA [35]
[36] "" - NA [36]
[37] "" - NA [37]
[38] "" - NA [38]
[39] "" - NA [39]
[40] "" - NA [40]
[41] "Y" - NA [41]
[42] "" - NA [42]
[43] "" - NA [43]
[44] "Y" - NA [44]
[45] "Y" - NA [45]
[46] "" - NA [46]
[47] "" - NA [47]
[48] "Y" - NA [48]
[49] "" - NA [49]
[50] "Y" - NA [50]
[51] "" - NA [51]
[52] "" - NA [52]
[53] "Y" - NA [53]
[54] "" - NA [54]
[55] "" - NA [55]
[56] "" - NA [56]
[57] "" - NA [57]
[58] "" - NA [58]
[59] "Y" - NA [59]
[60] "" - NA [60]
[61] "Y" - NA [61]
[62] "" - NA [62]
[63] "" - NA [63]
[64] "Y" - NA [64]
[65] "Y" - NA [65]
[66] "Y" - NA [66]
[67] "Y" - NA [67]
[68] "Y" - NA [68]
[69] "" - NA [69]
[70] "Y" - NA [70]
[71] "" - NA [71]
[72] "" - NA [72]
[73] "" - NA [73]
[74] "" - NA [74]
[75] "" - NA [75]
[76] "Y" - NA [76]
[77] "" - NA [77]
[78] "Y" - NA [78]
[79] "Y" - NA [79]
[80] "" - NA [80]
[81] "Y" - NA [81]
[82] "" - NA [82]
[83] "" - NA [83]
[84] "" - NA [84]
[85] "" - NA [85]
[86] "" - NA [86]
[87] "" - NA [87]
[88] "Y" - NA [88]
[89] "" - NA [89]
[90] "Y" - NA [90]
[91] "" - NA [91]
[92] "Y" - NA [92]
[93] "" - NA [93]
[94] "" - NA [94]
[95] "Y" - NA [95]
[96] "Y" - NA [96]
[97] "" - NA [97]
[98] "" - NA [98]
[99] "" - NA [99]
[100] "Y" - NA [100]
[101] "" - NA [101]
[102] "" - NA [102]
[103] "Y" - NA [103]
[104] "Y" - NA [104]
[105] "" - NA [105]
[106] "" - NA [106]
[107] "Y" - NA [107]
[108] "Y" - NA [108]
[109] "" - NA [109]
[110] "" - NA [110]
[111] "Y" - NA [111]
[112] "" - NA [112]
[113] "" - NA [113]
[114] "Y" - NA [114]
[115] "Y" - NA [115]
[116] "" - NA [116]
[117] "" - NA [117]
[118] "" - NA [118]
[119] "" - NA [119]
[120] "" - NA [120]
[121] "Y" - NA [121]
[122] "" - NA [122]
[123] "" - NA [123]
[124] "" - NA [124]
[125] "Y" - NA [125]
[126] "" - NA [126]
[127] "Y" - NA [127]
[128] "" - NA [128]
[129] "" - NA [129]
[130] "" - NA [130]
[131] "Y" - NA [131]
[132] "" - NA [132]
[133] "Y" - NA [133]
[134] "" - NA [134]
[135] "" - NA [135]
[136] "Y" - NA [136]
[137] "" - NA [137]
[138] "" - NA [138]
[139] "Y" - NA [139]
[140] "Y" - NA [140]
[141] "Y" - NA [141]
[142] "Y" - NA [142]
[143] "" - NA [143]
[144] "" - NA [144]
[145] "" - NA [145]
[146] "Y" - NA [146]
[147] "" - NA [147]
[148] "" - NA [148]
[149] "" - NA [149]
[150] "" - NA [150]
[151] "" - NA [151]
[152] "Y" - NA [152]
[153] "Y" - NA [153]
[154] "" - NA [154]
[155] "Y" - NA [155]
[156] "" - NA [156]
[157] "Y" - NA [157]
[158] "Y" - NA [158]
[159] "" - NA [159]
[160] "Y" - NA [160]
[161] "" - NA [161]
[162] "" - NA [162]
[163] "" - NA [163]
[164] "Y" - NA [164]
[165] "Y" - NA [165]
[166] "Y" - NA [166]
[167] "Y" - NA [167]
[168] "" - NA [168]
[169] "" - NA [169]
[170] "" - NA [170]
[171] "" - NA [171]
[172] "Y" - NA [172]
[173] "Y" - NA [173]
[174] "Y" - NA [174]
[175] "Y" - NA [175]
[176] "Y" - NA [176]
[177] "" - NA [177]
[178] "Y" - NA [178]
[179] "" - NA [179]
[180] "" - NA [180]
[181] "" - NA [181]
[182] "Y" - NA [182]
[183] "" - NA [183]
[184] "Y" - NA [184]
[185] "" - NA [185]
[186] "Y" - NA [186]
[187] "Y" - NA [187]
[188] "" - NA [188]
[189] "" - NA [189]
[190] "" - NA [190]
[191] "Y" - NA [191]
[192] "" - NA [192]
[193] "" - NA [193]
[194] "" - NA [194]
[195] "" - NA [195]
[196] "Y" - NA [196]
[197] "" - NA [197]
[198] "Y" - NA [198]
[199] "" - NA [199]
[200] "" - NA [200]
[201] "" - NA [201]
[202] "" - NA [202]
[203] "" - NA [203]
[204] "Y" - NA [204]
[205] "" - NA [205]
[206] "" - NA [206]
[207] "" - NA [207]
[208] "Y" - NA [208]
[209] "" - NA [209]
[210] "Y" - NA [210]
[211] "" - NA [211]
[212] "" - NA [212]
[213] "" - NA [213]
[214] "" - NA [214]
[215] "Y" - NA [215]
[216] "Y" - NA [216]
[217] "Y" - NA [217]
[218] "" - NA [218]
[219] "" - NA [219]
[220] "Y" - NA [220]
[221] "" - NA [221]
[222] "" - NA [222]
[223] "" - NA [223]
[224] "" - NA [224]
[225] "Y" - NA [225]
[226] "Y" - NA [226]
[227] "Y" - NA [227]
[228] "" - NA [228]
[229] "" - NA [229]
[230] "" - NA [230]
[231] "Y" - NA [231]
[232] "" - NA [232]
[233] "" - NA [233]
[234] "" - NA [234]
[235] "" - NA [235]
[236] "" - NA [236]
[237] "" - NA [237]
[238] "" - NA [238]
[239] "" - NA [239]
[240] "" - NA [240]
[241] "" - NA [241]
[242] "Y" - NA [242]
[243] "Y" - NA [243]
[244] "" - NA [244]
[245] "" - NA [245]
[246] "" - NA [246]
[247] "Y" - NA [247]
[248] "" - NA [248]
[249] "Y" - NA [249]
[250] "" - NA [250]
[251] "" - NA [251]
[252] "" - NA [252]
[253] "Y" - NA [253]
[254] "" - NA [254]
`CADAM.ADSL[[33]][22:28]`: 23.40 33.60 24.60 23.50 27.10 26.00 21.40
`ADAM.ADSL[[33]][22:28]`: 23.40 33.60 24.60 23.40 27.10 26.00 21.40
`CADAM.ADSL[[33]][38:44]`: 25.70 20.20 40.10 34.50 NA 23.50 32.00
`ADAM.ADSL[[33]][38:44]`: 25.70 20.20 40.10 34.60 NA 23.50 32.00
`CADAM.ADSL[[33]][61:67]`: 21.30 20.80 25.60 21.80 20.10 24.80 27.00
`ADAM.ADSL[[33]][61:67]`: 21.30 20.80 25.60 21.70 20.10 24.80 27.00
`CADAM.ADSL[[33]][68:74]`: 24.30 28.10 23.90 15.10 24.60 20.10 26.20
`ADAM.ADSL[[33]][68:74]`: 24.30 28.10 23.90 15.00 24.60 20.10 26.20
CADAM.ADSL[[33]] | ADAM.ADSL[[33]]
[95] 27.50 | 27.50 [95]
[96] 22.70 | 22.70 [96]
[97] 21.20 | 21.20 [97]
[98] 21.00 - 20.90 [98]
[99] 33.20 | 33.20 [99]
[100] 26.90 - 26.80 [100]
[101] 24.20 | 24.20 [101]
[102] 20.90 | 20.90 [102]
[103] 20.60 | 20.60 [103]
`CADAM.ADSL[[34]][39:45]`: "<25" ">=30" ">=30" "<25" "<25" ">=30" "25-<30"
`ADAM.ADSL[[34]][39:45]`: "<25" ">=30" ">=30" NA "<25" ">=30" "25-<30"
`CADAM.ADSL[[35]][38:44]`: 148.60 156.20 162.60 171.50 154.90 177.80 165.10
`ADAM.ADSL[[35]][38:44]`: 148.60 156.20 162.60 171.40 154.90 177.80 165.10
`CADAM.ADSL[[35]][138:144]`: 165.10 166.40 149.90 171.50 170.20 172.70 167.60
`ADAM.ADSL[[35]][138:144]`: 165.10 166.40 149.90 171.40 170.20 172.70 167.60
`CADAM.ADSL[[35]][242:248]`: 158.80 158.80 186.20 171.50 156.20 162.60 174.00
`ADAM.ADSL[[35]][242:248]`: 158.80 158.80 186.20 171.40 156.20 162.60 174.00
`CADAM.ADSL[[36]][1:7]`: 54.40 80.30 99.30 88.50 62.60 67.10 78.00
`ADAM.ADSL[[36]][1:7]`: 54.40 80.30 99.30 88.40 62.60 67.10 78.00
CADAM.ADSL[[36]] | ADAM.ADSL[[36]]
[22] 77.10 | 77.10 [22]
[23] 95.90 | 95.90 [23]
[24] 69.00 | 69.00 [24]
[25] 56.30 - 56.20 [25]
[26] 78.50 | 78.50 [26]
[27] 82.10 | 82.10 [27]
[28] 66.70 | 66.70 [28]
[29] 77.10 | 77.10 [29]
[30] 70.80 | 70.80 [30]
[31] 56.30 - 56.20 [31]
[32] 80.30 | 80.30 [32]
[33] 64.90 | 64.90 [33]
[34] 84.80 | 84.80 [34]
`CADAM.ADSL[[36]][52:58]`: 49.90 59.40 55.80 56.30 45.40 55.30 76.20
`ADAM.ADSL[[36]][52:58]`: 49.90 59.40 55.80 56.20 45.40 55.30 76.20
`CADAM.ADSL[[36]][61:67]`: 46.70 66.70 81.00 63.10 55.50 80.70 75.80
`ADAM.ADSL[[36]][61:67]`: 46.70 66.70 81.00 63.00 55.50 80.70 75.80
`CADAM.ADSL[[36]][68:74]`: 73.50 77.80 51.70 41.10 64.40 49.90 54.40
`ADAM.ADSL[[36]][68:74]`: 73.50 77.80 51.70 41.00 64.40 49.90 54.40
`CADAM.ADSL[[36]][75:81]`: 46.30 73.00 48.80 88.50 59.90 68.50 78.50
`ADAM.ADSL[[36]][75:81]`: 46.30 73.00 48.80 88.40 59.90 68.50 78.50
CADAM.ADSL[[36]] | ADAM.ADSL[[36]]
[95] 84.40 | 84.40 [95]
[96] 48.50 | 48.50 [96]
[97] 44.50 | 44.50 [97]
[98] 57.20 - 57.10 [98]
[99] 96.20 | 96.20 [99]
[100] 56.30 - 56.20 [100]
[101] 54.40 | 54.40 [101]
[102] 58.70 | 58.70 [102]
[103] 57.80 | 57.80 [103]
`CADAM.ADSL[[36]][152:158]`: 68.50 70.30 72.60 56.30 70.80 58.10 51.70
`ADAM.ADSL[[36]][152:158]`: 68.50 70.30 72.60 56.20 70.80 58.10 51.70
`CADAM.ADSL[[36]][175:181]`: 71.70 46.70 42.60 56.30 89.40 82.10 34.00
`ADAM.ADSL[[36]][175:181]`: 71.70 46.70 42.60 56.20 89.40 82.10 34.00
`CADAM.ADSL[[36]][207:213]`: 75.80 59.90 67.10 69.90 54.40 79.80 75.30
`ADAM.ADSL[[36]][207:213]`: 75.80 59.90 67.10 69.80 54.40 79.80 75.30
`CADAM.ADSL[[36]][215:221]`: 72.60 76.70 80.70 69.90 52.60 45.80 59.40
`ADAM.ADSL[[36]][215:221]`: 72.60 76.70 80.70 69.80 52.60 45.80 59.40
CADAM.ADSL[[37]] | ADAM.ADSL[[37]]
[1] 16.0 - NA [1]
[2] 14.0 - NA [2]
[3] 16.0 - NA [3]
[4] 12.0 - NA [4]
[5] 9.0 - NA [5]
[6] 8.0 - NA [6]
[7] 18.0 - NA [7]
[8] 22.0 - NA [8]
[9] 12.0 - NA [9]
[10] 14.0 - NA [10]
[11] 12.0 - NA [11]
[12] 10.0 - NA [12]
[13] 16.0 - NA [13]
[14] 15.0 - NA [14]
[15] 6.0 - NA [15]
[16] 16.0 - NA [16]
[17] 15.0 - NA [17]
[18] 16.0 - NA [18]
[19] 12.0 - NA [19]
[20] 13.0 - NA [20]
[21] 12.0 - NA [21]
[22] 18.0 - NA [22]
[23] 11.0 - NA [23]
[24] 12.0 - NA [24]
[25] 14.0 - NA [25]
[26] 16.0 - NA [26]
[27] 15.0 - NA [27]
[28] 20.0 - NA [28]
[29] 18.0 - NA [29]
[30] 24.0 - NA [30]
[31] 15.0 - NA [31]
[32] 10.0 - NA [32]
[33] 13.0 - NA [33]
[34] 12.0 - NA [34]
[35] 12.0 - NA [35]
[36] 16.0 - NA [36]
[37] 10.0 - NA [37]
[38] 12.0 - NA [38]
[39] 18.0 - NA [39]
[40] 12.0 - NA [40]
[41] 14.0 - NA [41]
[42] 18.0 - NA [42]
[43] 12.0 - NA [43]
[44] 10.0 - NA [44]
[45] 17.0 - NA [45]
[46] 6.0 - NA [46]
[47] 8.0 - NA [47]
[48] 16.0 - NA [48]
[49] 16.0 - NA [49]
[50] 12.0 - NA [50]
[51] 5.0 - NA [51]
[52] 12.0 - NA [52]
[53] 12.0 - NA [53]
[54] 12.0 - NA [54]
[55] 8.0 - NA [55]
[56] 12.0 - NA [56]
[57] 11.0 - NA [57]
[58] 7.0 - NA [58]
[59] 12.0 - NA [59]
[60] 12.0 - NA [60]
[61] 12.0 - NA [61]
[62] 16.0 - NA [62]
[63] 14.0 - NA [63]
[64] 12.0 - NA [64]
[65] 18.0 - NA [65]
[66] 12.0 - NA [66]
[67] 16.0 - NA [67]
[68] 12.0 - NA [68]
[69] 8.0 - NA [69]
[70] 13.0 - NA [70]
[71] 12.0 - NA [71]
[72] 14.0 - NA [72]
[73] 10.0 - NA [73]
[74] 12.0 - NA [74]
[75] 16.0 - NA [75]
[76] 14.0 - NA [76]
[77] 16.0 - NA [77]
[78] 12.0 - NA [78]
[79] 16.0 - NA [79]
[80] 16.0 - NA [80]
[81] 9.0 - NA [81]
[82] 12.0 - NA [82]
[83] 11.0 - NA [83]
[84] 16.0 - NA [84]
[85] 12.0 - NA [85]
[86] 6.0 - NA [86]
[87] 16.0 - NA [87]
[88] 12.0 - NA [88]
[89] 12.0 - NA [89]
[90] 20.0 - NA [90]
[91] 12.0 - NA [91]
[92] 12.0 - NA [92]
[93] 12.0 - NA [93]
[94] 8.0 - NA [94]
[95] 12.0 - NA [95]
[96] 12.0 - NA [96]
[97] 10.0 - NA [97]
[98] 6.0 - NA [98]
[99] 12.0 - NA [99]
[100] 13.0 - NA [100]
[101] 12.0 - NA [101]
[102] 15.0 - NA [102]
[103] 11.0 - NA [103]
[104] 8.0 - NA [104]
[105] 14.0 - NA [105]
[106] 7.0 - NA [106]
[107] 18.0 - NA [107]
[108] 12.0 - NA [108]
[109] 12.0 - NA [109]
[110] 12.0 - NA [110]
[111] 8.0 - NA [111]
[112] 9.0 - NA [112]
[113] 8.0 - NA [113]
[114] 12.0 - NA [114]
[115] 12.0 - NA [115]
[116] 8.0 - NA [116]
[117] 12.0 - NA [117]
[118] 11.0 - NA [118]
[119] 12.0 - NA [119]
[120] 18.0 - NA [120]
[121] 13.0 - NA [121]
[122] 12.0 - NA [122]
[123] 18.0 - NA [123]
[124] 13.0 - NA [124]
[125] 12.0 - NA [125]
[126] 12.0 - NA [126]
[127] 16.0 - NA [127]
[128] 8.0 - NA [128]
[129] 13.0 - NA [129]
[130] 13.0 - NA [130]
[131] 8.0 - NA [131]
[132] 12.0 - NA [132]
[133] 21.0 - NA [133]
[134] 12.0 - NA [134]
[135] 20.0 - NA [135]
[136] 9.0 - NA [136]
[137] 16.0 - NA [137]
[138] 12.0 - NA [138]
[139] 14.0 - NA [139]
[140] 12.0 - NA [140]
[141] 6.0 - NA [141]
[142] 8.0 - NA [142]
[143] 18.0 - NA [143]
[144] 6.0 - NA [144]
[145] 10.0 - NA [145]
[146] 12.0 - NA [146]
[147] 16.0 - NA [147]
[148] 13.0 - NA [148]
[149] 16.0 - NA [149]
[150] 16.0 - NA [150]
[151] 16.0 - NA [151]
[152] 16.0 - NA [152]
[153] 12.0 - NA [153]
[154] 12.0 - NA [154]
[155] 8.0 - NA [155]
[156] 12.0 - NA [156]
[157] 12.0 - NA [157]
[158] 12.0 - NA [158]
[159] 16.0 - NA [159]
[160] 10.0 - NA [160]
[161] 12.0 - NA [161]
[162] 12.0 - NA [162]
[163] 14.0 - NA [163]
[164] 16.0 - NA [164]
[165] 12.0 - NA [165]
[166] 3.0 - NA [166]
[167] 12.0 - NA [167]
[168] 8.0 - NA [168]
[169] 8.0 - NA [169]
[170] 16.0 - NA [170]
[171] 12.0 - NA [171]
[172] 12.0 - NA [172]
[173] 12.0 - NA [173]
[174] 16.0 - NA [174]
[175] 20.0 - NA [175]
[176] 12.0 - NA [176]
[177] 12.0 - NA [177]
[178] 12.0 - NA [178]
[179] 16.0 - NA [179]
[180] 6.0 - NA [180]
[181] 12.0 - NA [181]
[182] 18.0 - NA [182]
[183] 12.0 - NA [183]
[184] 12.0 - NA [184]
[185] 9.0 - NA [185]
[186] 12.0 - NA [186]
[187] 12.0 - NA [187]
[188] 8.0 - NA [188]
[189] 6.0 - NA [189]
[190] 16.0 - NA [190]
[191] 13.0 - NA [191]
[192] 12.0 - NA [192]
[193] 12.0 - NA [193]
[194] 16.0 - NA [194]
[195] 16.0 - NA [195]
[196] 13.0 - NA [196]
[197] 12.0 - NA [197]
[198] 9.0 - NA [198]
[199] 16.0 - NA [199]
[200] 6.0 - NA [200]
[201] 10.0 - NA [201]
[202] 16.0 - NA [202]
[203] 14.0 - NA [203]
[204] 12.0 - NA [204]
[205] 12.0 - NA [205]
[206] 7.0 - NA [206]
[207] 13.0 - NA [207]
[208] 12.0 - NA [208]
[209] 11.0 - NA [209]
[210] 16.0 - NA [210]
[211] 12.0 - NA [211]
[212] 12.0 - NA [212]
[213] 12.0 - NA [213]
[214] 12.0 - NA [214]
[215] 8.0 - NA [215]
[216] 12.0 - NA [216]
[217] 8.0 - NA [217]
[218] 8.0 - NA [218]
[219] 12.0 - NA [219]
[220] 18.0 - NA [220]
[221] 14.0 - NA [221]
[222] 12.0 - NA [222]
[223] 12.0 - NA [223]
[224] 12.0 - NA [224]
[225] 9.0 - NA [225]
[226] 16.0 - NA [226]
[227] 12.0 - NA [227]
[228] 13.0 - NA [228]
[229] 14.0 - NA [229]
[230] 12.0 - NA [230]
[231] 16.0 - NA [231]
[232] 8.0 - NA [232]
[233] 10.0 - NA [233]
[234] 14.0 - NA [234]
[235] 15.0 - NA [235]
[236] 17.0 - NA [236]
[237] 16.0 - NA [237]
[238] 12.0 - NA [238]
[239] 16.0 - NA [239]
[240] 14.0 - NA [240]
[241] 12.0 - NA [241]
[242] 14.0 - NA [242]
[243] 16.0 - NA [243]
[244] 12.0 - NA [244]
[245] 14.0 - NA [245]
[246] 16.0 - NA [246]
[247] 12.0 - NA [247]
[248] 21.0 - NA [248]
[249] 21.0 - NA [249]
[250] 18.0 - NA [250]
[251] 12.0 - NA [251]
[252] 15.0 - NA [252]
[253] 10.0 - NA [253]
[254] 16.0 - NA [254]
CADAM.ADSL[[44]] | ADAM.ADSL[[44]]
[1] 12.0 - NA [1]
[2] 5.0 - NA [2]
[3] 12.0 - NA [3]
[4] 5.0 - NA [4]
[5] 12.0 - NA [5]
[6] 6.0 - NA [6]
[7] 12.0 - NA [7]
[8] 4.0 - NA [8]
[9] 8.0 - NA [9]
[10] 12.0 - NA [10]
[11] 12.0 - NA [11]
[12] 12.0 - NA [12]
[13] 7.0 - NA [13]
[14] 12.0 - NA [14]
[15] 12.0 - NA [15]
[16] 7.0 - NA [16]
[17] 4.0 - NA [17]
[18] 7.0 - NA [18]
[19] 12.0 - NA [19]
[20] 12.0 - NA [20]
[21] 9.0 - NA [21]
[22] 12.0 - NA [22]
[23] 12.0 - NA [23]
[24] 10.0 - NA [24]
[25] 12.0 - NA [25]
[26] 9.0 - NA [26]
[27] 9.0 - NA [27]
[28] 12.0 - NA [28]
[29] 12.0 - NA [29]
[30] 5.0 - NA [30]
[31] 12.0 - NA [31]
[32] 4.0 - NA [32]
[33] 12.0 - NA [33]
[34] 12.0 - NA [34]
[35] 4.0 - NA [35]
[36] 12.0 - NA [36]
[37] 12.0 - NA [37]
[38] 7.0 - NA [38]
[39] 12.0 - NA [39]
[40] 12.0 - NA [40]
[41] 7.0 - NA [41]
[42] 9.0 - NA [42]
[43] 12.0 - NA [43]
[44] 9.0 - NA [44]
[45] 10.0 - NA [45]
[46] 7.0 - NA [46]
[47] 12.0 - NA [47]
[48] 10.0 - NA [48]
[49] 4.0 - NA [49]
[50] 8.0 - NA [50]
[51] 4.0 - NA [51]
[52] 12.0 - NA [52]
[53] 12.0 - NA [53]
[54] 4.0 - NA [54]
[55] 11.0 - NA [55]
[56] 12.0 - NA [56]
[57] 7.0 - NA [57]
[58] 12.0 - NA [58]
[59] 4.0 - NA [59]
[60] 12.0 - NA [60]
[61] 7.0 - NA [61]
[62] 5.0 - NA [62]
[63] 11.0 - NA [63]
[64] 7.0 - NA [64]
[65] 6.0 - NA [65]
[66] 9.0 - NA [66]
[67] 8.0 - NA [67]
[68] 10.0 - NA [68]
[69] 12.0 - NA [69]
[70] 9.0 - NA [70]
[71] 12.0 - NA [71]
[72] 12.0 - NA [72]
[73] 12.0 - NA [73]
[74] 12.0 - NA [74]
[75] 11.0 - NA [75]
[76] 8.0 - NA [76]
[77] 9.0 - NA [77]
[78] 8.0 - NA [78]
[79] 7.0 - NA [79]
[80] 10.0 - NA [80]
[81] 9.0 - NA [81]
[82] 12.0 - NA [82]
[83] 12.0 - NA [83]
[84] 8.0 - NA [84]
[85] 12.0 - NA [85]
[86] 4.0 - NA [86]
[87] 12.0 - NA [87]
[88] 10.0 - NA [88]
[89] 5.0 - NA [89]
[90] 4.0 - NA [90]
[91] 12.0 - NA [91]
[92] 10.0 - NA [92]
[93] 12.0 - NA [93]
[94] 12.0 - NA [94]
[95] 11.0 - NA [95]
[96] 9.0 - NA [96]
[97] 12.0 - NA [97]
[98] 7.0 - NA [98]
[99] 4.0 - NA [99]
[100] 11.0 - NA [100]
[101] 12.0 - NA [101]
[102] 12.0 - NA [102]
[103] 7.0 - NA [103]
[104] 4.0 - NA [104]
[105] 4.0 - NA [105]
[106] 12.0 - NA [106]
[107] 4.0 - NA [107]
[108] 5.0 - NA [108]
[109] 12.0 - NA [109]
[110] 12.0 - NA [110]
[111] 7.0 - NA [111]
[112] 12.0 - NA [112]
[113] 9.0 - NA [113]
[114] 5.0 - NA [114]
[115] 7.0 - NA [115]
[116] 4.0 - NA [116]
[117] 12.0 - NA [117]
[118] 8.0 - NA [118]
[119] 12.0 - NA [119]
[120] 12.0 - NA [120]
[121] 10.0 - NA [121]
[122] 12.0 - NA [122]
[123] 12.0 - NA [123]
[124] 12.0 - NA [124]
[125] 9.0 - NA [125]
[126] 12.0 - NA [126]
[127] 8.0 - NA [127]
[128] 4.0 - NA [128]
[129] 11.0 - NA [129]
[130] 12.0 - NA [130]
[131] 8.0 - NA [131]
[132] 12.0 - NA [132]
[133] 5.0 - NA [133]
[134] 12.0 - NA [134]
[135] 12.0 - NA [135]
[136] 10.0 - NA [136]
[137] 12.0 - NA [137]
[138] 12.0 - NA [138]
[139] 9.0 - NA [139]
[140] 8.0 - NA [140]
[141] 10.0 - NA [141]
[142] 9.0 - NA [142]
[143] 11.0 - NA [143]
[144] 9.0 - NA [144]
[145] 12.0 - NA [145]
[146] 11.0 - NA [146]
[147] 12.0 - NA [147]
[148] 12.0 - NA [148]
[149] 12.0 - NA [149]
[150] 4.0 - NA [150]
[151] 12.0 - NA [151]
[152] 4.0 - NA [152]
[153] 4.0 - NA [153]
[154] 12.0 - NA [154]
[155] 7.0 - NA [155]
[156] 12.0 - NA [156]
[157] 9.0 - NA [157]
[158] 8.0 - NA [158]
[159] 12.0 - NA [159]
[160] 11.0 - NA [160]
[161] 12.0 - NA [161]
[162] 12.0 - NA [162]
[163] 4.0 - NA [163]
[164] 7.0 - NA [164]
[165] 5.0 - NA [165]
[166] 7.0 - NA [166]
[167] 10.0 - NA [167]
[168] 12.0 - NA [168]
[169] 12.0 - NA [169]
[170] 12.0 - NA [170]
[171] 12.0 - NA [171]
[172] 11.0 - NA [172]
[173] 4.0 - NA [173]
[174] 8.0 - NA [174]
[175] 9.0 - NA [175]
[176] 9.0 - NA [176]
[177] 6.0 - NA [177]
[178] 11.0 - NA [178]
[179] 12.0 - NA [179]
[180] 12.0 - NA [180]
[181] 12.0 - NA [181]
[182] 10.0 - NA [182]
[183] 12.0 - NA [183]
[184] 5.0 - NA [184]
[185] 12.0 - NA [185]
[186] 9.0 - NA [186]
[187] 4.0 - NA [187]
[188] 12.0 - NA [188]
[189] 12.0 - NA [189]
[190] 12.0 - NA [190]
[191] 7.0 - NA [191]
[192] 12.0 - NA [192]
[193] 12.0 - NA [193]
[194] 12.0 - NA [194]
[195] 12.0 - NA [195]
[196] 10.0 - NA [196]
[197] 12.0 - NA [197]
[198] 9.0 - NA [198]
[199] 12.0 - NA [199]
[200] 12.0 - NA [200]
[201] 12.0 - NA [201]
[202] 4.0 - NA [202]
[203] 12.0 - NA [203]
[204] 9.0 - NA [204]
[205] 7.0 - NA [205]
[206] 12.0 - NA [206]
[207] 5.0 - NA [207]
[208] 9.0 - NA [208]
[209] 12.0 - NA [209]
[210] 4.0 - NA [210]
[211] 12.0 - NA [211]
[212] 12.0 - NA [212]
[213] 4.0 - NA [213]
[214] 12.0 - NA [214]
[215] 10.0 - NA [215]
[216] 8.0 - NA [216]
[217] 7.0 - NA [217]
[218] 12.0 - NA [218]
[219] 12.0 - NA [219]
[220] 10.0 - NA [220]
[221] 12.0 - NA [221]
[222] 12.0 - NA [222]
[223] 12.0 - NA [223]
[224] 12.0 - NA [224]
[225] 11.0 - NA [225]
[226] 7.0 - NA [226]
[227] 9.0 - NA [227]
[228] 7.0 - NA [228]
[229] 11.0 - NA [229]
[230] 12.0 - NA [230]
[231] 9.0 - NA [231]
[232] 12.0 - NA [232]
[233] 12.0 - NA [233]
[234] 12.0 - NA [234]
[235] 12.0 - NA [235]
[236] 12.0 - NA [236]
[237] 12.0 - NA [237]
[238] 8.0 - NA [238]
[239] 8.0 - NA [239]
[240] 12.0 - NA [240]
[241] 12.0 - NA [241]
[242] 4.0 - NA [242]
[243] 7.0 - NA [243]
[244] 12.0 - NA [244]
[245] 12.0 - NA [245]
[246] 12.0 - NA [246]
[247] 5.0 - NA [247]
[248] 9.0 - NA [248]
[249] 11.0 - NA [249]
[250] 12.0 - NA [250]
[251] 9.0 - NA [251]
[252] 12.0 - NA [252]
[253] 9.0 - NA [253]
[254] 8.0 - NA [254]
CADAM.ADSL[[46]] | ADAM.ADSL[[46]]
[1] "COMPLETED" - NA [1]
[2] "ADVERSE EVENT" - NA [2]
[3] "COMPLETED" - NA [3]
[4] "STUDY TERMINATED BY SPONSOR" - NA [4]
[5] "COMPLETED" - NA [5]
[6] "ADVERSE EVENT" - NA [6]
[7] "COMPLETED" - NA [7]
[8] "ADVERSE EVENT" - NA [8]
[9] "ADVERSE EVENT" - NA [9]
[10] "COMPLETED" - NA [10]
[11] "COMPLETED" - NA [11]
[12] "COMPLETED" - NA [12]
[13] "ADVERSE EVENT" - NA [13]
[14] "COMPLETED" - NA [14]
[15] "COMPLETED" - NA [15]
[16] "ADVERSE EVENT" - NA [16]
[17] "ADVERSE EVENT" - NA [17]
[18] "ADVERSE EVENT" - NA [18]
[19] "COMPLETED" - NA [19]
[20] "COMPLETED" - NA [20]
[21] "DEATH" - NA [21]
[22] "COMPLETED" - NA [22]
[23] "COMPLETED" - NA [23]
[24] "WITHDRAWAL BY SUBJECT" - NA [24]
[25] "COMPLETED" - NA [25]
[26] "ADVERSE EVENT" - NA [26]
[27] "ADVERSE EVENT" - NA [27]
[28] "COMPLETED" - NA [28]
[29] "COMPLETED" - NA [29]
[30] "ADVERSE EVENT" - NA [30]
[31] "STUDY TERMINATED BY SPONSOR" - NA [31]
[32] "PHYSICIAN DECISION" - NA [32]
[33] "COMPLETED" - NA [33]
[34] "COMPLETED" - NA [34]
[35] "PROTOCOL VIOLATION" - NA [35]
[36] "COMPLETED" - NA [36]
[37] "COMPLETED" - NA [37]
[38] "WITHDRAWAL BY SUBJECT" - NA [38]
[39] "COMPLETED" - NA [39]
[40] "COMPLETED" - NA [40]
[41] "ADVERSE EVENT" - NA [41]
[42] "WITHDRAWAL BY SUBJECT" - NA [42]
[43] "COMPLETED" - NA [43]
[44] "ADVERSE EVENT" - NA [44]
[45] "ADVERSE EVENT" - NA [45]
[46] "LOST TO FOLLOW-UP" - NA [46]
[47] "COMPLETED" - NA [47]
[48] "ADVERSE EVENT" - NA [48]
[49] "PROTOCOL VIOLATION" - NA [49]
[50] "ADVERSE EVENT" - NA [50]
[51] "WITHDRAWAL BY SUBJECT" - NA [51]
[52] "COMPLETED" - NA [52]
[53] "ADVERSE EVENT" - NA [53]
[54] "WITHDRAWAL BY SUBJECT" - NA [54]
[55] "WITHDRAWAL BY SUBJECT" - NA [55]
[56] "COMPLETED" - NA [56]
[57] "PROTOCOL VIOLATION" - NA [57]
[58] "COMPLETED" - NA [58]
[59] "ADVERSE EVENT" - NA [59]
[60] "COMPLETED" - NA [60]
[61] "ADVERSE EVENT" - NA [61]
[62] "WITHDRAWAL BY SUBJECT" - NA [62]
[63] "WITHDRAWAL BY SUBJECT" - NA [63]
[64] "ADVERSE EVENT" - NA [64]
[65] "ADVERSE EVENT" - NA [65]
[66] "ADVERSE EVENT" - NA [66]
[67] "ADVERSE EVENT" - NA [67]
[68] "ADVERSE EVENT" - NA [68]
[69] "WITHDRAWAL BY SUBJECT" - NA [69]
[70] "ADVERSE EVENT" - NA [70]
[71] "COMPLETED" - NA [71]
[72] "COMPLETED" - NA [72]
[73] "COMPLETED" - NA [73]
[74] "COMPLETED" - NA [74]
[75] "WITHDRAWAL BY SUBJECT" - NA [75]
[76] "ADVERSE EVENT" - NA [76]
[77] "WITHDRAWAL BY SUBJECT" - NA [77]
[78] "ADVERSE EVENT" - NA [78]
[79] "ADVERSE EVENT" - NA [79]
[80] "PROTOCOL VIOLATION" - NA [80]
[81] "ADVERSE EVENT" - NA [81]
[82] "COMPLETED" - NA [82]
[83] "COMPLETED" - NA [83]
[84] "WITHDRAWAL BY SUBJECT" - NA [84]
[85] "DEATH" - NA [85]
[86] "WITHDRAWAL BY SUBJECT" - NA [86]
[87] "LOST TO FOLLOW-UP" - NA [87]
[88] "ADVERSE EVENT" - NA [88]
[89] "PHYSICIAN DECISION" - NA [89]
[90] "ADVERSE EVENT" - NA [90]
[91] "COMPLETED" - NA [91]
[92] "ADVERSE EVENT" - NA [92]
[93] "COMPLETED" - NA [93]
[94] "COMPLETED" - NA [94]
[95] "ADVERSE EVENT" - NA [95]
[96] "ADVERSE EVENT" - NA [96]
[97] "COMPLETED" - NA [97]
[98] "WITHDRAWAL BY SUBJECT" - NA [98]
[99] "PROTOCOL VIOLATION" - NA [99]
[100] "ADVERSE EVENT" - NA [100]
[101] "COMPLETED" - NA [101]
[102] "COMPLETED" - NA [102]
[103] "ADVERSE EVENT" - NA [103]
[104] "ADVERSE EVENT" - NA [104]
[105] "WITHDRAWAL BY SUBJECT" - NA [105]
[106] "COMPLETED" - NA [106]
[107] "ADVERSE EVENT" - NA [107]
[108] "ADVERSE EVENT" - NA [108]
[109] "COMPLETED" - NA [109]
[110] "COMPLETED" - NA [110]
[111] "ADVERSE EVENT" - NA [111]
[112] "COMPLETED" - NA [112]
[113] "PHYSICIAN DECISION" - NA [113]
[114] "ADVERSE EVENT" - NA [114]
[115] "ADVERSE EVENT" - NA [115]
[116] "WITHDRAWAL BY SUBJECT" - NA [116]
[117] "COMPLETED" - NA [117]
[118] "WITHDRAWAL BY SUBJECT" - NA [118]
[119] "COMPLETED" - NA [119]
[120] "COMPLETED" - NA [120]
[121] "ADVERSE EVENT" - NA [121]
[122] "COMPLETED" - NA [122]
[123] "COMPLETED" - NA [123]
[124] "COMPLETED" - NA [124]
[125] "ADVERSE EVENT" - NA [125]
[126] "COMPLETED" - NA [126]
[127] "ADVERSE EVENT" - NA [127]
[128] "PROTOCOL VIOLATION" - NA [128]
[129] "STUDY TERMINATED BY SPONSOR" - NA [129]
[130] "COMPLETED" - NA [130]
[131] "ADVERSE EVENT" - NA [131]
[132] "COMPLETED" - NA [132]
[133] "ADVERSE EVENT" - NA [133]
[134] "COMPLETED" - NA [134]
[135] "COMPLETED" - NA [135]
[136] "ADVERSE EVENT" - NA [136]
[137] "COMPLETED" - NA [137]
[138] "COMPLETED" - NA [138]
[139] "ADVERSE EVENT" - NA [139]
[140] "ADVERSE EVENT" - NA [140]
[141] "ADVERSE EVENT" - NA [141]
[142] "ADVERSE EVENT" - NA [142]
[143] "LACK OF EFFICACY" - NA [143]
[144] "STUDY TERMINATED BY SPONSOR" - NA [144]
[145] "COMPLETED" - NA [145]
[146] "ADVERSE EVENT" - NA [146]
[147] "COMPLETED" - NA [147]
[148] "COMPLETED" - NA [148]
[149] "COMPLETED" - NA [149]
[150] "WITHDRAWAL BY SUBJECT" - NA [150]
[151] "COMPLETED" - NA [151]
[152] "ADVERSE EVENT" - NA [152]
[153] "ADVERSE EVENT" - NA [153]
[154] "COMPLETED" - NA [154]
[155] "ADVERSE EVENT" - NA [155]
[156] "COMPLETED" - NA [156]
[157] "ADVERSE EVENT" - NA [157]
[158] "ADVERSE EVENT" - NA [158]
[159] "COMPLETED" - NA [159]
[160] "ADVERSE EVENT" - NA [160]
[161] "COMPLETED" - NA [161]
[162] "COMPLETED" - NA [162]
[163] "DEATH" - NA [163]
[164] "ADVERSE EVENT" - NA [164]
[165] "ADVERSE EVENT" - NA [165]
[166] "ADVERSE EVENT" - NA [166]
[167] "ADVERSE EVENT" - NA [167]
[168] "COMPLETED" - NA [168]
[169] "COMPLETED" - NA [169]
[170] "COMPLETED" - NA [170]
[171] "COMPLETED" - NA [171]
[172] "ADVERSE EVENT" - NA [172]
[173] "ADVERSE EVENT" - NA [173]
[174] "ADVERSE EVENT" - NA [174]
[175] "ADVERSE EVENT" - NA [175]
[176] "ADVERSE EVENT" - NA [176]
[177] "WITHDRAWAL BY SUBJECT" - NA [177]
[178] "ADVERSE EVENT" - NA [178]
[179] "COMPLETED" - NA [179]
[180] "WITHDRAWAL BY SUBJECT" - NA [180]
[181] "COMPLETED" - NA [181]
[182] "ADVERSE EVENT" - NA [182]
[183] "COMPLETED" - NA [183]
[184] "ADVERSE EVENT" - NA [184]
[185] "COMPLETED" - NA [185]
[186] "ADVERSE EVENT" - NA [186]
[187] "ADVERSE EVENT" - NA [187]
[188] "COMPLETED" - NA [188]
[189] "COMPLETED" - NA [189]
[190] "COMPLETED" - NA [190]
[191] "ADVERSE EVENT" - NA [191]
[192] "COMPLETED" - NA [192]
[193] "COMPLETED" - NA [193]
[194] "COMPLETED" - NA [194]
[195] "COMPLETED" - NA [195]
[196] "ADVERSE EVENT" - NA [196]
[197] "COMPLETED" - NA [197]
[198] "ADVERSE EVENT" - NA [198]
[199] "COMPLETED" - NA [199]
[200] "COMPLETED" - NA [200]
[201] "COMPLETED" - NA [201]
[202] "STUDY TERMINATED BY SPONSOR" - NA [202]
[203] "COMPLETED" - NA [203]
[204] "ADVERSE EVENT" - NA [204]
[205] "WITHDRAWAL BY SUBJECT" - NA [205]
[206] "COMPLETED" - NA [206]
[207] "WITHDRAWAL BY SUBJECT" - NA [207]
[208] "ADVERSE EVENT" - NA [208]
[209] "COMPLETED" - NA [209]
[210] "ADVERSE EVENT" - NA [210]
[211] "COMPLETED" - NA [211]
[212] "COMPLETED" - NA [212]
[213] "WITHDRAWAL BY SUBJECT" - NA [213]
[214] "COMPLETED" - NA [214]
[215] "ADVERSE EVENT" - NA [215]
[216] "ADVERSE EVENT" - NA [216]
[217] "ADVERSE EVENT" - NA [217]
[218] "COMPLETED" - NA [218]
[219] "COMPLETED" - NA [219]
[220] "ADVERSE EVENT" - NA [220]
[221] "COMPLETED" - NA [221]
[222] "COMPLETED" - NA [222]
[223] "COMPLETED" - NA [223]
[224] "COMPLETED" - NA [224]
[225] "ADVERSE EVENT" - NA [225]
[226] "ADVERSE EVENT" - NA [226]
[227] "ADVERSE EVENT" - NA [227]
[228] "WITHDRAWAL BY SUBJECT" - NA [228]
[229] "WITHDRAWAL BY SUBJECT" - NA [229]
[230] "COMPLETED" - NA [230]
[231] "ADVERSE EVENT" - NA [231]
[232] "COMPLETED" - NA [232]
[233] "COMPLETED" - NA [233]
[234] "COMPLETED" - NA [234]
[235] "COMPLETED" - NA [235]
[236] "COMPLETED" - NA [236]
[237] "COMPLETED" - NA [237]
[238] "LACK OF EFFICACY" - NA [238]
[239] "LACK OF EFFICACY" - NA [239]
[240] "STUDY TERMINATED BY SPONSOR" - NA [240]
[241] "COMPLETED" - NA [241]
[242] "ADVERSE EVENT" - NA [242]
[243] "ADVERSE EVENT" - NA [243]
[244] "STUDY TERMINATED BY SPONSOR" - NA [244]
[245] "COMPLETED" - NA [245]
[246] "COMPLETED" - NA [246]
[247] "ADVERSE EVENT" - NA [247]
[248] "WITHDRAWAL BY SUBJECT" - NA [248]
[249] "ADVERSE EVENT" - NA [249]
[250] "COMPLETED" - NA [250]
[251] "WITHDRAWAL BY SUBJECT" - NA [251]
[252] "COMPLETED" - NA [252]
[253] "ADVERSE EVENT" - NA [253]
[254] "LACK OF EFFICACY" - NA [254]
CADAM.ADSL[[47]] | ADAM.ADSL[[47]]
[1] "Completed" - NA [1]
[2] "Adverse Event" - NA [2]
[3] "Completed" - NA [3]
[4] "Sponsor Decision" - NA [4]
[5] "Completed" - NA [5]
[6] "Adverse Event" - NA [6]
[7] "Completed" - NA [7]
[8] "Adverse Event" - NA [8]
[9] "Adverse Event" - NA [9]
[10] "Completed" - NA [10]
[11] "Completed" - NA [11]
[12] "Completed" - NA [12]
[13] "Adverse Event" - NA [13]
[14] "Completed" - NA [14]
[15] "Completed" - NA [15]
[16] "Adverse Event" - NA [16]
[17] "Adverse Event" - NA [17]
[18] "Adverse Event" - NA [18]
[19] "Completed" - NA [19]
[20] "Completed" - NA [20]
[21] "Death" - NA [21]
[22] "Completed" - NA [22]
[23] "Completed" - NA [23]
[24] "Withdrew Consent" - NA [24]
[25] "Completed" - NA [25]
[26] "Adverse Event" - NA [26]
[27] "Adverse Event" - NA [27]
[28] "Completed" - NA [28]
[29] "Completed" - NA [29]
[30] "Adverse Event" - NA [30]
[31] "Sponsor Decision" - NA [31]
[32] "Physician Decision" - NA [32]
[33] "Completed" - NA [33]
[34] "Completed" - NA [34]
[35] "Protocol Violation" - NA [35]
[36] "Completed" - NA [36]
[37] "Completed" - NA [37]
[38] "Withdrew Consent" - NA [38]
[39] "Completed" - NA [39]
[40] "Completed" - NA [40]
[41] "Adverse Event" - NA [41]
[42] "Withdrew Consent" - NA [42]
[43] "Completed" - NA [43]
[44] "Adverse Event" - NA [44]
[45] "Adverse Event" - NA [45]
[46] "Lost to Follow-up" - NA [46]
[47] "Completed" - NA [47]
[48] "Adverse Event" - NA [48]
[49] "I/E Not Met" - NA [49]
[50] "Adverse Event" - NA [50]
[51] "Withdrew Consent" - NA [51]
[52] "Completed" - NA [52]
[53] "Adverse Event" - NA [53]
[54] "Withdrew Consent" - NA [54]
[55] "Withdrew Consent" - NA [55]
[56] "Completed" - NA [56]
[57] "Protocol Violation" - NA [57]
[58] "Completed" - NA [58]
[59] "Adverse Event" - NA [59]
[60] "Completed" - NA [60]
[61] "Adverse Event" - NA [61]
[62] "Withdrew Consent" - NA [62]
[63] "Withdrew Consent" - NA [63]
[64] "Adverse Event" - NA [64]
[65] "Adverse Event" - NA [65]
[66] "Adverse Event" - NA [66]
[67] "Adverse Event" - NA [67]
[68] "Adverse Event" - NA [68]
[69] "Withdrew Consent" - NA [69]
[70] "Adverse Event" - NA [70]
[71] "Completed" - NA [71]
[72] "Completed" - NA [72]
[73] "Completed" - NA [73]
[74] "Completed" - NA [74]
[75] "Withdrew Consent" - NA [75]
[76] "Adverse Event" - NA [76]
[77] "Withdrew Consent" - NA [77]
[78] "Adverse Event" - NA [78]
[79] "Adverse Event" - NA [79]
[80] "Protocol Violation" - NA [80]
[81] "Adverse Event" - NA [81]
[82] "Completed" - NA [82]
[83] "Completed" - NA [83]
[84] "Withdrew Consent" - NA [84]
[85] "Death" - NA [85]
[86] "Withdrew Consent" - NA [86]
[87] "Lost to Follow-up" - NA [87]
[88] "Adverse Event" - NA [88]
[89] "Physician Decision" - NA [89]
[90] "Adverse Event" - NA [90]
[91] "Completed" - NA [91]
[92] "Adverse Event" - NA [92]
[93] "Completed" - NA [93]
[94] "Completed" - NA [94]
[95] "Adverse Event" - NA [95]
[96] "Adverse Event" - NA [96]
[97] "Completed" - NA [97]
[98] "Withdrew Consent" - NA [98]
[99] "I/E Not Met" - NA [99]
[100] "Adverse Event" - NA [100]
[101] "Completed" - NA [101]
[102] "Completed" - NA [102]
[103] "Adverse Event" - NA [103]
[104] "Adverse Event" - NA [104]
[105] "Withdrew Consent" - NA [105]
[106] "Completed" - NA [106]
[107] "Adverse Event" - NA [107]
[108] "Adverse Event" - NA [108]
[109] "Completed" - NA [109]
[110] "Completed" - NA [110]
[111] "Adverse Event" - NA [111]
[112] "Completed" - NA [112]
[113] "Physician Decision" - NA [113]
[114] "Adverse Event" - NA [114]
[115] "Adverse Event" - NA [115]
[116] "Withdrew Consent" - NA [116]
[117] "Completed" - NA [117]
[118] "Withdrew Consent" - NA [118]
[119] "Completed" - NA [119]
[120] "Completed" - NA [120]
[121] "Adverse Event" - NA [121]
[122] "Completed" - NA [122]
[123] "Completed" - NA [123]
[124] "Completed" - NA [124]
[125] "Adverse Event" - NA [125]
[126] "Completed" - NA [126]
[127] "Adverse Event" - NA [127]
[128] "I/E Not Met" - NA [128]
[129] "Sponsor Decision" - NA [129]
[130] "Completed" - NA [130]
[131] "Adverse Event" - NA [131]
[132] "Completed" - NA [132]
[133] "Adverse Event" - NA [133]
[134] "Completed" - NA [134]
[135] "Completed" - NA [135]
[136] "Adverse Event" - NA [136]
[137] "Completed" - NA [137]
[138] "Completed" - NA [138]
[139] "Adverse Event" - NA [139]
[140] "Adverse Event" - NA [140]
[141] "Adverse Event" - NA [141]
[142] "Adverse Event" - NA [142]
[143] "Lack of Efficacy" - NA [143]
[144] "Sponsor Decision" - NA [144]
[145] "Completed" - NA [145]
[146] "Adverse Event" - NA [146]
[147] "Completed" - NA [147]
[148] "Completed" - NA [148]
[149] "Completed" - NA [149]
[150] "Withdrew Consent" - NA [150]
[151] "Completed" - NA [151]
[152] "Adverse Event" - NA [152]
[153] "Adverse Event" - NA [153]
[154] "Completed" - NA [154]
[155] "Adverse Event" - NA [155]
[156] "Completed" - NA [156]
[157] "Adverse Event" - NA [157]
[158] "Adverse Event" - NA [158]
[159] "Completed" - NA [159]
[160] "Adverse Event" - NA [160]
[161] "Completed" - NA [161]
[162] "Completed" - NA [162]
[163] "Death" - NA [163]
[164] "Adverse Event" - NA [164]
[165] "Adverse Event" - NA [165]
[166] "Adverse Event" - NA [166]
[167] "Adverse Event" - NA [167]
[168] "Completed" - NA [168]
[169] "Completed" - NA [169]
[170] "Completed" - NA [170]
[171] "Completed" - NA [171]
[172] "Adverse Event" - NA [172]
[173] "Adverse Event" - NA [173]
[174] "Adverse Event" - NA [174]
[175] "Adverse Event" - NA [175]
[176] "Adverse Event" - NA [176]
[177] "Withdrew Consent" - NA [177]
[178] "Adverse Event" - NA [178]
[179] "Completed" - NA [179]
[180] "Withdrew Consent" - NA [180]
[181] "Completed" - NA [181]
[182] "Adverse Event" - NA [182]
[183] "Completed" - NA [183]
[184] "Adverse Event" - NA [184]
[185] "Completed" - NA [185]
[186] "Adverse Event" - NA [186]
[187] "Adverse Event" - NA [187]
[188] "Completed" - NA [188]
[189] "Completed" - NA [189]
[190] "Completed" - NA [190]
[191] "Adverse Event" - NA [191]
[192] "Completed" - NA [192]
[193] "Completed" - NA [193]
[194] "Completed" - NA [194]
[195] "Completed" - NA [195]
[196] "Adverse Event" - NA [196]
[197] "Completed" - NA [197]
[198] "Adverse Event" - NA [198]
[199] "Completed" - NA [199]
[200] "Completed" - NA [200]
[201] "Completed" - NA [201]
[202] "Sponsor Decision" - NA [202]
[203] "Completed" - NA [203]
[204] "Adverse Event" - NA [204]
[205] "Withdrew Consent" - NA [205]
[206] "Completed" - NA [206]
[207] "Withdrew Consent" - NA [207]
[208] "Adverse Event" - NA [208]
[209] "Completed" - NA [209]
[210] "Adverse Event" - NA [210]
[211] "Completed" - NA [211]
[212] "Completed" - NA [212]
[213] "Withdrew Consent" - NA [213]
[214] "Completed" - NA [214]
[215] "Adverse Event" - NA [215]
[216] "Adverse Event" - NA [216]
[217] "Adverse Event" - NA [217]
[218] "Completed" - NA [218]
[219] "Completed" - NA [219]
[220] "Adverse Event" - NA [220]
[221] "Completed" - NA [221]
[222] "Completed" - NA [222]
[223] "Completed" - NA [223]
[224] "Completed" - NA [224]
[225] "Adverse Event" - NA [225]
[226] "Adverse Event" - NA [226]
[227] "Adverse Event" - NA [227]
[228] "Withdrew Consent" - NA [228]
[229] "Withdrew Consent" - NA [229]
[230] "Completed" - NA [230]
[231] "Adverse Event" - NA [231]
[232] "Completed" - NA [232]
[233] "Completed" - NA [233]
[234] "Completed" - NA [234]
[235] "Completed" - NA [235]
[236] "Completed" - NA [236]
[237] "Completed" - NA [237]
[238] "Lack of Efficacy" - NA [238]
[239] "Lack of Efficacy" - NA [239]
[240] "Sponsor Decision" - NA [240]
[241] "Completed" - NA [241]
[242] "Adverse Event" - NA [242]
[243] "Adverse Event" - NA [243]
[244] "Sponsor Decision" - NA [244]
[245] "Completed" - NA [245]
[246] "Completed" - NA [246]
[247] "Adverse Event" - NA [247]
[248] "Withdrew Consent" - NA [248]
[249] "Adverse Event" - NA [249]
[250] "Completed" - NA [250]
[251] "Withdrew Consent" - NA [251]
[252] "Completed" - NA [252]
[253] "Adverse Event" - NA [253]
[254] "Lack of Efficacy" - NA [254]
CADAM.ADSL[[48]] | ADAM.ADSL[[48]]
[1] 23.0 - 0.0 [1]
[2] 23.0 - 0.0 [2]
[3] 23.0 - 0.0 [3]
[4] 23.0 - 0.0 [4]
[5] 21.0 - 0.0 [5]
[6] 23.0 - 0.0 [6]
[7] 10.0 - 0.0 [7]
[8] 23.0 - 0.0 [8]
[9] 20.0 - 0.0 [9]
[10] 20.0 - 0.0 [10]
[11] 19.0 - 0.0 [11]
[12] 21.0 - 0.0 [12]
[13] 22.0 - 0.0 [13]
[14] 21.0 - 0.0 [14]
[15] 10.0 - 0.0 [15]
[16] 19.0 - 0.0 [16]
[17] 10.0 - 0.0 [17]
[18] 23.0 - 0.0 [18]
[19] 23.0 - 0.0 [19]
[20] 21.0 - 0.0 [20]
[21] 12.0 - 0.0 [21]
[22] 20.0 - 0.0 [22]
[23] 23.0 - 0.0 [23]
[24] 22.0 - 0.0 [24]
[25] 22.0 - 0.0 [25]
[26] 23.0 - 0.0 [26]
[27] 23.0 - 0.0 [27]
[28] 20.0 - 0.0 [28]
[29] 23.0 - 0.0 [29]
[30] 23.0 - 0.0 [30]
[31] 23.0 - 0.0 [31]
[32] 23.0 - 0.0 [32]
[33] 22.0 - 0.0 [33]
[34] 22.0 - 0.0 [34]
[35] 11.0 - 0.0 [35]
[36] 23.0 - 0.0 [36]
[37] 18.0 - 0.0 [37]
[38] 17.0 - 0.0 [38]
[39] 22.0 - 0.0 [39]
[40] 15.0 - 0.0 [40]
[41] 23.0 - 0.0 [41]
[42] 23.0 - 0.0 [42]
[43] 23.0 - 0.0 [43]
[44] 23.0 - 0.0 [44]
[45] 17.0 - 0.0 [45]
[46] 22.0 - 0.0 [46]
[47] 22.0 - 0.0 [47]
[48] 14.0 - 0.0 [48]
[49] 11.0 - 0.0 [49]
[50] 22.0 - 0.0 [50]
[51] 12.0 - 0.0 [51]
[52] 19.0 - 0.0 [52]
[53] 13.0 - 0.0 [53]
[54] 14.0 - 0.0 [54]
[55] 20.0 - 0.0 [55]
[56] 23.0 - 0.0 [56]
[57] 10.0 - 0.0 [57]
[58] 12.0 - 0.0 [58]
[59] 23.0 - 0.0 [59]
[60] 16.0 - 0.0 [60]
[61] 21.0 - 0.0 [61]
[62] 21.0 - 0.0 [62]
[63] 17.0 - 0.0 [63]
[64] 21.0 - 0.0 [64]
[65] 17.0 - 0.0 [65]
[66] 20.0 - 0.0 [66]
[67] 17.0 - 0.0 [67]
[68] 18.0 - 0.0 [68]
[69] 20.0 - 0.0 [69]
[70] 16.0 - 0.0 [70]
[71] 22.0 - 0.0 [71]
[72] 23.0 - 0.0 [72]
[73] 16.0 - 0.0 [73]
[74] 22.0 - 0.0 [74]
[75] 15.0 - 0.0 [75]
[76] 21.0 - 0.0 [76]
[77] 16.0 - 0.0 [77]
[78] 16.0 - 0.0 [78]
[79] 23.0 - 0.0 [79]
[80] 18.0 - 0.0 [80]
[81] 22.0 - 0.0 [81]
[82] 22.0 - 0.0 [82]
[83] 20.0 - 0.0 [83]
[84] 20.0 - 0.0 [84]
[85] 23.0 - 0.0 [85]
[86] 18.0 - 0.0 [86]
[87] 23.0 - 0.0 [87]
[88] 16.0 - 0.0 [88]
[89] 15.0 - 0.0 [89]
[90] 19.0 - 0.0 [90]
[91] 23.0 - 0.0 [91]
[92] 23.0 - 0.0 [92]
[93] 10.0 - 0.0 [93]
[94] 23.0 - 0.0 [94]
[95] 19.0 - 0.0 [95]
[96] 20.0 - 0.0 [96]
[97] 15.0 - 0.0 [97]
[98] 14.0 - 0.0 [98]
[99] 19.0 - 0.0 [99]
[100] 19.0 - 0.0 [100]
[101] 21.0 - 0.0 [101]
[102] 20.0 - 0.0 [102]
[103] 16.0 - 0.0 [103]
[104] 20.0 - 0.0 [104]
[105] 24.0 - 0.0 [105]
[106] 21.0 - 0.0 [106]
[107] 17.0 - 0.0 [107]
[108] 18.0 - 0.0 [108]
[109] 23.0 - 0.0 [109]
[110] 17.0 - 0.0 [110]
[111] 16.0 - 0.0 [111]
[112] 13.0 - 0.0 [112]
[113] 10.0 - 0.0 [113]
[114] 14.0 - 0.0 [114]
[115] 17.0 - 0.0 [115]
[116] 22.0 - 0.0 [116]
[117] 12.0 - 0.0 [117]
[118] 15.0 - 0.0 [118]
[119] 10.0 - 0.0 [119]
[120] 16.0 - 0.0 [120]
[121] 23.0 - 0.0 [121]
[122] 22.0 - 0.0 [122]
[123] 15.0 - 0.0 [123]
[124] 18.0 - 0.0 [124]
[125] 22.0 - 0.0 [125]
[126] 13.0 - 0.0 [126]
[127] 16.0 - 0.0 [127]
[128] 17.0 - 0.0 [128]
[129] 20.0 - 0.0 [129]
[130] 15.0 - 0.0 [130]
[131] 19.0 - 0.0 [131]
[132] 15.0 - 0.0 [132]
[133] 10.0 - 0.0 [133]
[134] 15.0 - 0.0 [134]
[135] 16.0 - 0.0 [135]
[136] 21.0 - 0.0 [136]
[137] 23.0 - 0.0 [137]
[138] 11.0 - 0.0 [138]
[139] 16.0 - 0.0 [139]
[140] 20.0 - 0.0 [140]
[141] 14.0 - 0.0 [141]
[142] 24.0 - 0.0 [142]
[143] 20.0 - 0.0 [143]
[144] 16.0 - 0.0 [144]
[145] 10.0 - 0.0 [145]
[146] 21.0 - 0.0 [146]
[147] 17.0 - 0.0 [147]
[148] 14.0 - 0.0 [148]
[149] 11.0 - 0.0 [149]
[150] 10.0 - 0.0 [150]
[151] 23.0 - 0.0 [151]
[152] 18.0 - 0.0 [152]
[153] 17.0 - 0.0 [153]
[154] 12.0 - 0.0 [154]
[155] 11.0 - 0.0 [155]
[156] 20.0 - 0.0 [156]
[157] 14.0 - 0.0 [157]
[158] 20.0 - 0.0 [158]
[159] 23.0 - 0.0 [159]
[160] 10.0 - 0.0 [160]
[161] 14.0 - 0.0 [161]
[162] 21.0 - 0.0 [162]
[163] 14.0 - 0.0 [163]
[164] 18.0 - 0.0 [164]
[165] 23.0 - 0.0 [165]
[166] 13.0 - 0.0 [166]
[167] 18.0 - 0.0 [167]
[168] 16.0 - 0.0 [168]
[169] 11.0 - 0.0 [169]
[170] 20.0 - 0.0 [170]
[171] 20.0 - 0.0 [171]
[172] 14.0 - 0.0 [172]
[173] 11.0 - 0.0 [173]
[174] 18.0 - 0.0 [174]
[175] 14.0 - 0.0 [175]
[176] 13.0 - 0.0 [176]
[177] 12.0 - 0.0 [177]
[178] 12.0 - 0.0 [178]
[179] 23.0 - 0.0 [179]
[180] 13.0 - 0.0 [180]
[181] 13.0 - 0.0 [181]
[182] 14.0 - 0.0 [182]
[183] 23.0 - 0.0 [183]
[184] 18.0 - 0.0 [184]
[185] 23.0 - 0.0 [185]
[186] 23.0 - 0.0 [186]
[187] 18.0 - 0.0 [187]
[188] 16.0 - 0.0 [188]
[189] 11.0 - 0.0 [189]
[190] 23.0 - 0.0 [190]
[191] 18.0 - 0.0 [191]
[192] 21.0 - 0.0 [192]
[193] 23.0 - 0.0 [193]
[194] 13.0 - 0.0 [194]
[195] 23.0 - 0.0 [195]
[196] 23.0 - 0.0 [196]
[197] 17.0 - 0.0 [197]
[198] 18.0 - 0.0 [198]
[199] 19.0 - 0.0 [199]
[200] 19.0 - 0.0 [200]
[201] 17.0 - 0.0 [201]
[202] 22.0 - 0.0 [202]
[203] 23.0 - 0.0 [203]
[204] 23.0 - 0.0 [204]
[205] 10.0 - 0.0 [205]
[206] 20.0 - 0.0 [206]
[207] 12.0 - 0.0 [207]
[208] 23.0 - 0.0 [208]
[209] 22.0 - 0.0 [209]
[210] 10.0 - 0.0 [210]
[211] 22.0 - 0.0 [211]
[212] 11.0 - 0.0 [212]
[213] 16.0 - 0.0 [213]
[214] 14.0 - 0.0 [214]
[215] 17.0 - 0.0 [215]
[216] 20.0 - 0.0 [216]
[217] 11.0 - 0.0 [217]
[218] 22.0 - 0.0 [218]
[219] 21.0 - 0.0 [219]
[220] 22.0 - 0.0 [220]
[221] 20.0 - 0.0 [221]
[222] 23.0 - 0.0 [222]
[223] 19.0 - 0.0 [223]
[224] 21.0 - 0.0 [224]
[225] 21.0 - 0.0 [225]
[226] 22.0 - 0.0 [226]
[227] 11.0 - 0.0 [227]
[228] 13.0 - 0.0 [228]
[229] 11.0 - 0.0 [229]
[230] 17.0 - 0.0 [230]
[231] 23.0 - 0.0 [231]
[232] 20.0 - 0.0 [232]
[233] 22.0 - 0.0 [233]
[234] 22.0 - 0.0 [234]
[235] 13.0 - 0.0 [235]
[236] 20.0 - 0.0 [236]
[237] 22.0 - 0.0 [237]
[238] 23.0 - 0.0 [238]
[239] 21.0 - 0.0 [239]
[240] 12.0 - 0.0 [240]
[241] 21.0 - 0.0 [241]
[242] 20.0 - 0.0 [242]
[243] 17.0 - 0.0 [243]
[244] 13.0 - 0.0 [244]
[245] 16.0 - 0.0 [245]
[246] 22.0 - 0.0 [246]
[247] 19.0 - 0.0 [247]
[248] 10.0 - 0.0 [248]
[249] 18.0 - 0.0 [249]
[250] 16.0 - 0.0 [250]
[251] 13.0 - 0.0 [251]
[252] 16.0 - 0.0 [252]
[253] 16.0 - 0.0 [253]
[254] 19.0 - 0.0 [254]
Thank you!
Josh: jcook0312@outlook.com
Richann: richann.watson@datarichconsulting.com